ιαχείριση Μνήµης υναµική δέσµευση µνήµης Μοντέλο µνήµης Περιεχόµενα Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης:
|
|
- Νίκανδρος Γιαννόπουλος
- 8 χρόνια πριν
- Προβολές:
Transcript
1 υναµική δέσµευση µνήµης ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων κλήσεων δέσµευσης µνήµης: new, malloc, κ.λπ. Εµµέσων κλήσεων δέσµευσης µνήµης: δηµιουργία συµβολοσειρών, buffers για αρχεία, πινάκων µε δυναµικά καθοριζόµενο µέγεθος, κ.λπ. Οι υλοποιήσεις των γλωσσών παρέχουν τη δυνατότητα διαχείρισης µνήµης κατά το χρόνο εκτέλεσης του προγράµµατος Κωστής Σαγώνας ιαχείριση µνήµης 2 Περιεχόµενα Μοντέλο µνήµης Μοντέλο µνήµης µε πίνακες στη Java Στοίβες (Stacks) Σωροί (Heaps) Τρέχοντες σύνδεσµοι στο σωρό Συλλογή σκουπιδιών (garbage collection) Προς το παρόν, ας υποθέσουµε ότι το λειτουργικό σύστηµα παρέχει στο πρόγραµµα µία ή περισσότερες περιοχές µνήµης κάποιου προκαθορισµένου µεγέθους για δυναµική δέσµευση Θα µοντελοποιήσουµε τις περιοχές αυτές ως πίνακες στη Java (Java arrays) Για να δούµε παραδείγµατα κώδικα διαχείρισης µνήµης, και Για πρακτική εξάσκηση µε τη Java ιαχείριση µνήµης 3 ιαχείριση µνήµης 4
2 ήλωση πινάκων στη Java Στη Java οι πίνακες ορίζονται ως: int[] a = null; Οι τύποι των πινάκων είναι τύποι αναφοράς ένας πίνακας στην πραγµατικότητα είναι ένα αντικείµενο, το οποίο µπορούµε να διαχειριστούµε µε κάποια ειδική σύνταξη Στο παραπάνω, η µεταβλητή a αρχικοποιείται σε null Μπορεί να της ανατεθεί µια αναφορά σε έναν πίνακα µε ακέραιες τιµές, αλλά στο παραπάνω παράδειγµα κάποιος τέτοιος πίνακας δεν της έχει ανατεθεί µέχρι στιγµής ηµιουργία πινάκων στη Java Νέα αντικείµενα πίνακες δηµιουργούνται µε τη new: int[] a = null; a = new int[100]; Και µπορούµε να συνδυάσουµε τις δύο παραπάνω δηλώσεις ως εξής: int[] a = new int[100]; ιαχείριση µνήµης 5 ιαχείριση µνήµης 6 Χρησιµοποίηση πινάκων στη Java int i = 0; while (i < a.length) { a[i] = 5; i++; Για να προσπελάσουµε ένα στοιχείο του πίνακα χρησιµοποιούµε την έκφραση a[i] (ως lvalue ή rvalue): όπου a είναι µια έκφραση αναφοράς σε πίνακα και i είναι µια ακέραια έκφραση Για το µέγεθος ενός πίνακα χρησιµοποιούµε a.length Οι δείκτες των πινάκων έχουν εύρος 0..(a.length-1) ιαχείριση µνήµης 7 ιαχειριστές µνήµης στη Java public class MemoryManager { private int[] memory; /** * MemoryManager constructor. initialmemory int[] of memory to manage public MemoryManager(int[] initialmemory) { memory = initialmemory; Ο πίνακας initialmemoryείναι µια περιοχή µνήµης που µας δίνεται από το λειτουργικό σύστηµα. ιαχείριση µνήµης 8
3 Στοίβες από εγγραφές δραστηριοποίησης Στοίβες (stacks) Στις περισσότερες γλώσσες, οι εγγραφές δραστηριοποίησης δεσµεύονται δυναµικά Σε πολλές γλώσσες, επαρκεί να δεσµεύσουµε µια εγγραφή κατά την κλήση µιας συνάρτησης η οποία αποδεσµεύεται κατά την επιστροφή της συνάρτησης Με αυτόν τον τρόπο παράγεται µια στοίβα από εγγραφές δραστηριοποίησης Μια στοίβα χρειάζεται ένα σχετικά απλό αλγόριθµο διαχείρισης µνήµης ιαχείριση µνήµης 9 ιαχείριση µνήµης 10 Εικονογράφηση µιας στοίβας top: 8 top: 4 Μια κενή στοίβα µε 8 λέξεις. Η στοίβα µεγαλώνει προς τα κάτω, από µεγάλες σε µικρές διευθύνσεις. Μια προκαθορισµένη θέση µνήµης (ή πιθανόν ένας καταχωρητής) αποθηκεύει τη διεύθυνση της µικρότερης θέσης µνήµης. 8 first activation record Το πρόγραµµα καλεί την m.push(3), η οποία επιστρέφει τη διεύθυνση του πρώτου από τις 3 λέξεις που δεσµεύονται για την εγγραφή δραστηριοποίησης. Η διαχείριση της µνήµης χρησιµοποιεί µια επιπλέον λέξη για να καταγράψει την προηγούµενη τιµή της top. 0: 0: ιαχείριση µνήµης 11 ιαχείριση µνήµης 12
4 top: 1 0: 8 first activation record second activation record 4 Το πρόγραµµα τώρα καλεί την m.push(2), η οποία γυρνάει τη διεύθυνση του πρώτου από τις 2λέξεις που δεσµεύονται για την εγγραφή δραστηριοποίησης. Η στοίβα τώρα γέµισε δεν υπάρχει χώρος ούτε για µια κλήση m.push(1). Για µια κλήση m.pop(), αναθέτουµε top = memory[top] για να επιστρέψουµε στην προηγούµενη κατάσταση. Υλοποίηση της µνήµης στοίβας στη Java public class StackManager { private int[] memory; // the memory we manage private int top; // index of top stack block /** * StackManager constructor. initialmemory int[] of memory to manage public StackManager(int[] initialmemory) { memory = initialmemory; top = memory.length; ιαχείριση µνήµης 13 ιαχείριση µνήµης 14 /** * Allocate a block and return its address. requestsize int size of block, > 0 block address StackOverflowError if out of stack space public int push(int requestsize) { int oldtop = top; top -= (requestsize+1); // extra word for oldtop if (top < 0) throw new StackOverflowError(); memory[top] = oldtop; return top+1; /** Pop the top stack frame. * This works only if the stack is not empty. public void pop() { top = memory[top]; Θα δούμε την εντολή throw και το χειρισμό εξαιρέσεων σε επόμενο μάθημα. ιαχείριση µνήµης 15 Σωροί (heaps) ιαχείριση µνήµης 16
5 ιάταξη σε σωρό Η διάταξη σε στοίβα έχει σχετικά εύκολη υλοποίηση Αλλά δεν επαρκεί πάντα: τι για παράδειγµα συµβαίνει εάν οι δεσµεύσεις και οι αποδεσµεύσεις κοµµατιών µνήµης ακολουθούν τυχαία σειρά; Ένας σωρός (heap) είναι µια ακολουθία από µπλοκ µνήµης τα οποία µας δίνουν τη δυνατότητα να έχουµε µη ταξινοµηµένη δέσµευση και αποδέσµευση µνήµης Υπάρχουν πολλοί µηχανισµοί υλοποίησης µνήµης σωρού ιαχείριση µνήµης 17 Υλοποίηση µέσω του αλγόριθµου First Fit Ο σωρός υλοποιείται ως µια συνδεδεµένη λίστα από ελεύθερα µπλοκ ( list) Αρχικά αποτελείται από µόνο ένα µεγάλο µπλοκ Για δέσµευση κάποιου κοµµατιού µνήµης: Ψάχνουµε στη list για το πρώτο µπλοκ µε µέγεθος τέτοιο ώστε να ικανοποιούνται οι απαιτήσεις της ζήτησης Εάν το µπλοκ είναι µεγαλύτερο από τη ζήτηση, τότε επιστρέφουµε το αχρησιµοποίητο κοµµάτι στη list Ικανοποιούµε την απαίτηση δέσµευσης µνήµης και επιστρέφουµε την αρχική διεύθυνση του δεσµευµένου µπλοκ Για αποδέσµευση, απλώς προσθέτουµε το ελευθερωθέν µπλοκ στην αρχή της list ιαχείριση µνήµης 18 Εικονογράφηση της µνήµης σωρού Ένας διαχειριστής µνήµης σωρού mπου αποτελείται από ένα πίνακα από 10 λέξεις, ο οποίος αρχικά είναι κενός. Ο σύνδεσµος στην αρχή της list κρατιέται στη µεταβλητή Start. Κάθε µπλοκ, δεσµευµένο ή µη, φυλάει το µέγεθός του στην πρώτη λέξη του. Τα ελεύθερα µπλοκ έχουν ένα σύνδεσµο στο επόµενο µπλοκ της list στη δεύτερη λέξη τους, ή την τιµή 1 εάν πρόκειται για το τελευταίο µπλοκ. Start: 0 ιαχείριση µνήµης 19 9: 8: 0: p1 = m.allocate(4); Η αναφορά p1θα πάρει την τιµή 1, δηλαδή τη διεύθυνση της πρώτης από τις τέσσερις δεσµευµένες λέξεις. Μία επιπλέον λέξη χρησιµοποιείται για να κρατήσει το µέγεθος του µπλοκ. Το υπόλοιπο µέρος του µπλοκ επεστράφη στη list. Start: 5 9: 8: 0: -1 ιαχείριση µνήµης first allocated block
6 p1 = m.allocate(4); p2 = m.allocate(2); 9: 8: -1 2 p1 = m.allocate(4); p2 = m.allocate(2); m.deallocate(p1); 9: 8: -1 2 Η αναφορά p2θα πάρει την τιµή 6, δηλαδή τη διεύθυνση της πρώτης από τις δύο δεσµευµένες λέξεις. Μία επιπλέον λέξη χρησιµοποιείται για να κρατήσει το µέγεθος του µπλοκ. Το υπόλοιπο µέρος του µπλοκ επεστράφη στη list. second allocated block 3 first allocated block Αποδεσµεύει το πρώτο δεσµευµένο µπλοκ και το επιστρέφει στην κεφαλή της list. second allocated block 3 8 Start: 8 0: 5 Start: 0 0: 5 ιαχείριση µνήµης 21 ιαχείριση µνήµης 22 p1 = m.allocate(4); p2 = m.allocate(2); m.deallocate(p1); p3 = m.allocate(1); Η αναφορά p3θα πάρει την τιµή 1, δηλαδή τη διεύθυνση της πρώτης δεσµευµένης λέξης. Προσέξτε ότι υπήρχαν δύο µπλοκ που θα µπορούσαν να εξυπηρετήσουν την απαίτηση δέσµευσης. Το άλλο µπλοκ θα προσέφερε ένα τέλειο ταίριασµα και θα επιλέγονταν από το µηχανισµό δέσµευσης µνήµης Best Fit. Start: 2 9: 8: -1 2 second allocated block : 2 third allocated block Υλοποίηση της µνήµης σωρού στη Java public class HeapManager { static private final int NULL = -1; // null link public int[] memory; // the memory we manage private int Start; // start of the list /** * HeapManager constructor. initialmemory int[] of memory to manage public HeapManager(int[] initialmemory) { memory = initialmemory; memory[0] = memory.length; // one big block memory[1] = NULL; // list ends with it Start = 0; // list starts with it ιαχείριση µνήµης 23 ιαχείριση µνήµης 24
7 /** * Allocate a block and return its address. requestsize int size of block, > 0 block address OutOfMemoryError if no block big enough public int allocate(int requestsize) { int size = requestsize + 1; // size with header // Do first-fit search: linear search of the // list for the first block of sufficient size. int p = Start; // head of list int lag = NULL; while (p!= NULL && memory[p] < size) { lag = p; // lag is previous p p = memory[p+1]; // link to next block if (p == NULL) // no block large enough throw new OutOfMemoryError(); int nextfree = memory[p+1]; // block after p ιαχείριση µνήµης 25 // Now p is the index of a block of sufficient size, // and lag is the index of p's predecessor in the // list, or NULL, and nextfree is the index of // p's successor in the list, or NULL. // If the block has more space than we need, carve // out what we need from the front and return the // unused end part to the list. int unused = memory[p]-size; // extra space if (unused > 1) { // if more than a header's worth nextfree = p+size; // index of the unused piece memory[nextfree] = unused; // fill in size memory[nextfree+1] = memory[p+1]; // fill in link memory[p] = size; // reduce p's size accordingly // Link out the block we are allocating and done. if (lag == NULL) Start = nextfree; else memory[lag+1] = nextfree; return p+1; // index of useable word (after header) ιαχείριση µνήµης 26 Ένα πρόβληµα /** * Deallocate an allocated block. This works only * if the block address is one that was returned * by allocate and has not yet been deallocated. address int address of the block public void deallocate(int address) { int addr = address-1; memory[addr+1] = Start; Start = addr; ιαχείριση µνήµης 27 Έστω η παρακάτω ακολουθία εντολών: p1 = m.allocate(4); p2 = m.allocate(4); m.deallocate(p1); m.deallocate(p2); p3 = m.allocate(7); Η τελευταία κλήση της allocate θα αποτύχει διότι τα ελεύθερα µπλοκ σπάνε σε µικρά κοµµάτια αλλά πουθενά δε ξαναενώνονται Χρειαζόµαστε ένα µηχανισµό ο οποίος συνασπίζει συνεχόµενα γειτονικά µπλοκ που είναι ελεύθερα ιαχείριση µνήµης 28
8 Μια από τις λύσεις του προβλήµατος Υλοποιούµε µια πιο έξυπνη µέθοδο deallocate: ιατηρούµε τη λίστα των ελεύθερων µπλοκ ταξινοµηµένη µε βάση τις διευθύνσεις των µπλοκ Όταν ελευθερώνουµε ένα µπλοκ, κοιτάµε το προηγούµενο και το επόµενό του µπλοκ που είναι ελεύθερα Εάν το µπλοκ που ελευθερώνουµε είναι συνεχόµενο µε κάποιο από αυτά, τα συνασπίζουµε Η µέθοδος αυτή είναι πιο αποτελεσµατική από την απλή τοποθέτηση του µπλοκ στην κεφαλή της list αλλά όµως είναι και πιο δαπανηρή σε χρόνο εκτέλεσης /** * Deallocate an allocated block. This works only * if the block address is one that was returned * by allocate and has not yet been deallocated. address int address of the block public void deallocate(int address) { int addr = address-1; // real start of the block // Find the insertion point in the sorted // list for this block. int p = Start; int lag = NULL; while (p!= NULL && p < addr) { lag = p; p = memory[p+1]; ιαχείριση µνήµης 29 ιαχείριση µνήµης 30 // Now p is the index of the block to come after // ours in the list, or NULL, and lag is the // index of the block to come before ours in the // list, or NULL. // If the one to come after ours is adjacent to it, // merge it into ours and restore the property // described above. if (addr+memory[addr] == p) { memory[addr] += memory[p]; // add its size to ours p = memory[p+1]; if (lag == NULL) { // ours will be first Start = addr; memory[addr+1] = p; else if (lag+memory[lag]==addr) { // block before is // adjacent to ours memory[lag] += memory[addr]; // merge ours into it memory[lag+1] = p; else { // neither: just a simple insertion memory[lag+1] = addr; memory[addr+1] = p; ιαχείριση µνήµης 31 ιαχείριση µνήµης 32
9 Ελεύθερες λίστες διαχωρισµένες βάσει µεγέθους Τα µικρού (και συνήθως προκαθορισµένου) µεγέθους µπλοκ συνήθως δεσµεύονται και αποδεσµεύονται πολύ πιο συχνά από τα µεγάλου ή τυχαίου µεγέθους µπλοκ Μια συνήθης βελτιστοποίηση: διατηρούµε ξεχωριστές λίστες ελεύθερων µπλοκ για (µικρού) µεγέθους µπλοκ τα οποία είναι δηµοφιλή Με άλλα λόγια διαχωρίζουµε τις λίστες µε βάση το µέγεθος των µπλοκ που αποθηκεύουν και αναφερόµαστε σε ελεύθερες λίστες διαχωρισµένες βάσει µεγέθους (size size-segregated segregated lists) Κατακερµατισµός (fragmentation) Λέµε ότι η µνήµη είναι κατακερµατισµένη όταν οι ελεύθερες περιοχές διαχωρίζονται από δεσµευµένα µπλοκ, και κατά συνέπεια δεν είναι δυνατό να δεσµεύσουµε όλη την ελεύθερη µνήµη ως ένα µπλοκ Γενικότερα, η µνήµη είναι κατακερµατισµένη όταν ο διαχειριστής της µνήµης σωρού δεν είναι σε θέση να εξυπηρετήσει τις αιτήσεις δέσµευσης µνήµης παρόλο που υπάρχει αρκετή ελεύθερη µνήµη συνολικά ιαχείριση µνήµης 33 ιαχείριση µνήµης 34 p1 = m.allocate(4); p2 = m.allocate(1); m.deallocate(p1); p3 = m.allocate(5); Η τελευταία δέσµευση θα αποτύχει λόγω τεµαχισµού των ελεύθερων µπλοκ. 9: 8: -1 3 second allocated block 2 Τρέχοντες Σύνδεσµοι στο Σωρό 7 Start: 0 0: 5 ιαχείριση µνήµης 35 ιαχείριση µνήµης 36
10 Τρέχοντες σύνδεσµοι στο σωρό Τρέχοντες σύνδεσµοι στο σωρό Μέχρι στιγµής, βλέπαµε το υπό εκτέλεση πρόγραµµα σαν ένα µαύρο κουτί που απλώς απαιτεί δεσµεύσεις και αποδεσµεύσεις µνήµης Τι κάνει το πρόγραµµα µε τις διευθύνσεις µνήµης που του παραχωρούνται; Τις αποθηκεύει σε κάποια ονόµατα (µεταβλητές) Ένας τρέχων σύνδεσµος στο σωρό (current heap link) είναι µια θέση µνήµης που περιέχει µια τιµή την οποία θα χρησιµοποιήσει το πρόγραµµα ως δείκτη στο σωρό a: b: 2 c: 1 (activation record for main) Στοίβα the stack start: (an IntList) head: 2 tail: null (a ConsCell) head: 1 tail: (a ConsCell) Σωρός the heap IntList a = new IntList(null); int b = 2; int c = 1; a = a.cons(b); a = a.cons(c); Που είναι οι τρέχοντες σύνδεσµοι στο σωρό στη διπλανή εικόνα; ιαχείριση µνήµης 37 ιαχείριση µνήµης 38 Εύρεση των τρεχόντων συνδέσµων στο σωρό Αρχίζουµε µε ένα σύνολο ριζών (root set): θέσεις µνήµης εκτός του σωρού που περιέχουν συνδέσµους σε θέσεις µνήµης στο σωρό, π.χ. σε ενεργές εγγραφές δραστηριοποίησης (στη στοίβα) καθολικές ή στατικές µεταβλητές Για κάθε στοιχείο του συνόλου, κοιτάµε το δεσµευµένο µπλοκ στο οποίο δείχνει ο σύνδεσµος και προσθέτουµε όλες τις θέσεις µνήµης του συγκεκριµένου µπλοκ στο σύνολό µας Επαναλαµβάνουµε την παραπάνω διαδικασία µέχρις του σηµείου όπου δε βρίσκουµε άλλες νέες θέσεις µνήµης ιαχείριση µνήµης 39 Λάθη κατά την εύρεση των τρεχόντων συνδέσµων Παραλείψεις: ξεχνάµε να περιλάβουµε µια θέση µνήµης που έχει έναν τρέχοντα σύνδεσµο στο σωρό Άχρηστες τιµές: συµπεριλαµβάνουµε θέσεις µνήµης για τις οποίες το πρόγραµµα ποτέ δε θα χρησιµοποιήσει τις τιµές που αποθηκεύουν ιευθύνσεις που δεν είναι θέσεις µνήµης: συµπεριλαµβάνουµε κάποιες θέσεις µνήµης στο σωρό µόνο και µόνο επειδή δε µπορούµε να ξεχωρίσουµε τιµές που χρησιµοποιούνται π.χ. ως δείκτες στο σωρό ή ως ακέραιοι (µε τιµή µια διεύθυνση µνήµης στο σωρό) ιαχείριση µνήµης 40
11 ε µπορούµε πάντα να αποφύγουµε τα λάθη Για τη σωστή διαχείριση του σωρού, τα λάθη παράλειψης είναι µη αποδεκτά και δε συγχωρούνται Άρα είµαστε υποχρεωµένοι να συµπεριλάβουµε όλες τις θέσεις µνήµης για τις οποίες υπάρχει πιθανότητα η τιµή που αποθηκεύεται στη συγκεκριµένη θέση µνήµης να χρησιµοποιηθεί από το πρόγραµµα Κατά συνέπεια, το να συµπεριλάβουµε άχρηστες θέσεις µνήµης στον υπολογισµό είναι αναπόφευκτο Ανάλογα µε τη γλώσσα, µπορεί να είναι αδύνατο να αποφύγουµε να συµπεριλάβουµε και τιµές που απλώς δείχνουν σα θέσεις µνήµης στο σωρό ιαχείριση µνήµης 41 Τιµές που δείχνουν σα διευθύνσεις µνήµης Για κάποιες µεταβλητές µπορεί να µην είµαστε σε θέση να καταλάβουµε πως χρησιµοποιούνται οι τιµές τους Για παράδειγµα, η παρακάτω µεταβλητή x µπορεί να χρησιµοποιηθεί είτε ως δείκτης είτε ως πίνακας από τέσσερις χαρακτήρες union { char *p; char tag[4]; x; Σηµείωση: το παραπάνω πρόβληµα είναι ακόµα χειρότερο στη C, διότι οι C compilers δεν κρατούν πληροφορία για τους τύπους των µεταβλητών κατά τη διάρκεια εκτέλεσης του προγράµµατος ιαχείριση µνήµης 42 Συµπίεση του σωρού (heap compaction) Μια λειτουργία που χρειάζεται πληροφορία για το σύνολο των τρεχόντων συνδέσµων στο σωρό Ο διαχειριστής της µνήµης µετακινεί δεσµευµένα µπλοκ: Αντιγράφει το µπλοκ σε µια νέα θέση, και Επικαιροποιεί όλους τους συνδέσµους στο (ή κάπου µέσα στο) µπλοκ Κατά συνέπεια συµπιέζει το σωρό, µετακινώντας όλα τα δεσµευµένα µπλοκ στο ένα άκρο του και αφήνοντας ένα µεγάλο ελεύθερο µπλοκ χωρίς κατακερµατισµό Συλλογή Σκουπιδιών ιαχείριση µνήµης 43 ιαχείριση µνήµης 44
12 Κάποια συνηθισµένα προβλήµατα µε δείκτες Συλλογή σκουπιδιών (garbage collection) type p: ^Integer; begin new(p); p^ := 21; dispose(p); p^ := p^ + 1 end procedure Leak; type p: ^Integer; begin new(p) end; Ξεκρέµαστος δείκτης: το διπλανό πρόγραµµα Pascal χρησιµοποιεί ένα δείκτη σε µπλοκ µνήµης µετά την αποδέσµευση του συγκεκριµένου µπλοκ ιαρροή µνήµης: το διπλανό πρόγραµµα Pascal δεσµεύει ένα µπλοκ µνήµης αλλά ξεχνάει να το αποδεσµεύσει Αφού τόσα σφάλµατα λογισµικού συµβαίνουν λόγω λαθών αποδέσµευσης µνήµης και επειδή δεν είναι βολικό για τον προγραµµατιστή να σκέφτεται για το πώς θα γίνει σωστά η αποδέσµευση µνήµης για ποιο λόγο να µην είναι ευθύνη της υλοποίησης της γλώσσας η αυτόµατη ανακύκλωση µνήµης; ιαχείριση µνήµης 45 ιαχείριση µνήµης 46 Τρεις βασικοί µηχανισµοί ανακύκλωσης µνήµης 1. Μαρκάρισµα και σκούπισµα (mark and sweep) 2. Αντιγραφή (copying) 3. Μέτρηµα αναφορών (reference counting) Μαρκάρισµα και σκούπισµα Ένας συλλέκτης µαρκαρίσµατος και σκουπίσµατος (mark-and-sweep collector) χρησιµοποιεί τους τρέχοντες συνδέσµους στο σωρό σε µια διαδικασία που έχει δύο φάσεις: Μαρκάρισµα: βρίσκουµε όλους τους τρέχοντες συνδέσµους στο σωρό και µαρκάρουµε όλα τα µπλοκ του σωρού τα οποία δείχνονται από κάποιον από τους συνδέσµους Σκούπισµα: κάνουµε ένα πέρασµα στο σωρό και επιστρέφουµε τα αµαρκάριστα µπλοκ στη λίστα µε τα ελεύθερα µπλοκ Τα µπλοκ που µαρκάρονται στην πρώτη φάση του αλγόριθµου δε µετακινούνται (non-moving collector) ιαχείριση µνήµης 47 ιαχείριση µνήµης 48
13 Συλλογή σκουπιδιών µέσω αντιγραφής Ένας συλλέκτης αντιγραφής (copying collector) διαιρεί τη µνήµη σε δύο κοµµάτια και χρησιµοποιεί τη µισή µόνο µνήµη για να ικανοποιήσει τις αιτήσεις δέσµευσης Όταν το µισό αυτό µέρος γεµίσει, βρίσκουµε συνδέσµους που δείχνουν σε µπλοκ στο πρώτο µισό και αντιγράφουµε αυτά τα µπλοκ στο δεύτερο µισό Η διαδικασία αυτή συµπιέζει τα χρησιµοποιούµενα µπλοκ, µε αποτέλεσµα να εξαφανίζει τον κατακερµατισµό Συλλέκτης µετακίνησης (moving collector) µπλοκ Μέτρηµα αναφορών Κάθε µπλοκ έχει ένα µετρητή που κρατάει τον αριθµό των συνδέσµων σωρού που δείχνουν στο µπλοκ Ο µετρητής αυτός αυξάνεται όταν κάποιος σύνδεσµος προς το µπλοκ δηµιουργηθεί (π.χ. µέσω ανάθεσης), και µειώνεται όταν κάποιος σύνδεσµος χαθεί Όταν η τιµή του µετρητή γίνει µηδέν, το µπλοκ είναι άχρηστο και µπορεί να ελευθερωθεί ηλαδή στη διαχείριση µνήµης µε µέτρηµα αναφορών δε χρειάζεται να βρούµε δυναµικά τους τρέχοντες συνδέσµους στο σωρό ιαχείριση µνήµης 49 ιαχείριση µνήµης 50 Πρόβληµα µετρήµατος αναφορών Πρόβληµα µετρήµατος αναφορών circle: link: 2 circle: null link: 1 (activation record) Στοίβα the stack link: link: Σωρός the heap 1 1 Ένα πρόβληµα µετρήµατος αναφορών: δε µπορούµε να ανακαλύψουµε κύκλους από άχρηστα µπλοκ. Στην εικόνα, µια κυκλικά συνδεδεµένη λίστα που δείχνεται από τη µεταβλητή circle. (activation record) Στοίβα the stack link: link: Σωρός the heap 1 1 Αν αναθέσουµε π.χ. την τιµή nullστη µεταβλητή circle, η τιµή του µετρητή θα µειωθεί. Κανένας µετρητής αναφορών δε γίνεται µηδέν, παρόλο που όλα τα µπλοκ είναι άχρηστα (σκουπίδια). ιαχείριση µνήµης 51 ιαχείριση µνήµης 52
14 Μέτρηµα αναφορών ε µπορεί να συλλέξει κύκλους σκουπιδιών Επιβάλλει κάποιο µη αµελητέο κόστος στην εκτέλεση του προγράµµατος, λόγω της ανάγκης να ενηµερώσουµε τους µετρητές αναφορών σε κάθε ανάθεση Ένα πλεονέκτηµα: ο αλγόριθµος είναι αυξητικός (incremental incremental), δηλαδή εκτελείται από τη φύση του σε µικρά βήµατα και δεν επιβάλλει µεγάλες παύσεις κατά την εκτέλεση του προγράµµατος Εκλεπτυσµένοι συλλέκτες σκουπιδιών Συλλέκτες γενεών (Generational collectors) Η προς συλλογή µνήµη χωρίζεται σε γενιές (generations) µε βάση την ηλικία των αντικειµένων στο µπλοκ Συλλέγουµε τα σκουπίδια στις νέες γενιές πιο συχνά (χρησιµοποιώντας κάποια από τις προηγούµενες µεθόδους) Αυξητικοί συλλέκτες (Incremental collectors) Συλλέγουν σκουπίδια σε µικρά χρονικά διαστήµατα τα οποία παρεµβάλλονται µε την εκτέλεση του προγράµµατος Κατά συνέπεια αποφεύγουν το σταµάτηµα της εφαρµογής για µεγάλο χρονικό διάστηµα και οι παύσεις λόγω αυτόµατης ανακύκλωσης µνήµης έχουν πολύ µικρή διάρκεια ιαχείριση µνήµης 53 ιαχείριση µνήµης 54 Γλώσσες µε αυτόµατη διαχείριση µνήµης Σε κάποιες γλώσσες η αυτόµατη διαχείριση µνήµης είναι απαίτηση: Lisp, Scheme, ML, Haskell, Erlang, Clean, Prolog, Java, C# Κάποιες άλλες, όπως η Ada, απλώς την ενθαρρύνουν Τέλος, κάποιες άλλες γλώσσες όπως η C και η C++ την καθιστούν πολύ δύσκολη Όµως ακόµα και για αυτές είναι δυνατή σε κάποιο βαθµό Υπάρχουν βιβλιοθήκες που αντικαθιστούν τη συνηθισµένη υλοποίηση των malloc/ µε ένα διαχειριστή µνήµης που χρησιµοποιεί συντηρητική συλλογή σκουπιδιών (conservative garbage collection) για την αυτόµατη ανακύκλωση µνήµης Τάσεις στην αυτόµατη διαχείριση µνήµης Μια ιδέα από τις αρχές του 1960, η δηµοτικότητα της οποίας έχει αυξηθεί σηµαντικά τα τελευταία χρόνια Οι καλές υλοποιήσεις των συλλεκτών σκουπιδιών έχουν επίδοση παρόµοια µε, ή µόνο κατά λίγο χειρότερη από, αυτήν η οποία είναι δυνατή µε διαχείριση µνήµης υπό τον έλεγχο του προγραµµατιστή Όλο και περισσότεροι προγραµµατιστές συνειδητοποιούν ότι η αυτόµατη ανακύκλωση µνήµης αυξάνει την παραγωγικότητά τους, οδηγεί σε λιγότερα σφάλµατα, και κατά συνέπεια αξίζει τον έξτρα χρόνο εκτέλεσης ιαχείριση µνήµης 55 ιαχείριση µνήµης 56
15 Συµπερασµατικά Η διαχείριση µνήµης είναι ένα σηµαντικό συστατικό των αποφάσεων σχεδιασµού καθώς και των συστηµάτων υλοποίησης των γλωσσών προγραµµατισµού Τόσο η επίδοση όσο και η αξιοπιστία των προγραµµάτων είναι σηµαντικοί παράγοντες της ανάπτυξης λογισµικού Η αυτόµατη διαχείριση µνήµης είναι µια από τις πιο ενεργές περιοχές ερευνητικής δραστηριότητας και πειραµατισµού στην περιοχή της υλοποίησης γλωσσών προγραµµατισµού ιαχείριση µνήµης 57
ιαχείριση Μνήµης υναµική δέσµευση µνήµης Περιεχόµενα Μοντέλο µνήµης ήλωση πινάκων στη Java ηµιουργία πινάκων στη Java
ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 υναµική δέσµευση µνήµης Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων
Διαχείριση Μνήμης. Andre Derain, The turning road, Lestraque, Κωστής Σαγώνας Νίκος Παπασπύρου
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Δυναμική δέσμευση μνήμης. Μοντέλο μνήμης. Περιεχόμενα. Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης:
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019
Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019 Γλώσσες με δομή Block Γλώσσες με δομή Block Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια
Βασικές Έννοιες Δοµών Δεδοµένων
Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή
Απλές Δοµές Δεδοµένων Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to
Κεφάλαιο 2 Δοµές Δεδοµένων Ι Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Δοµές Δεδοµένων Ι Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε
υναµικές οµές εδοµένων
υναµικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων Γενικά υναµική έσµευση Μνήµης οµή τύπου structure αυτοαναφορικές δοµές Η δήλωση typedef στη C Αναπαράσταση
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )
Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική
Στοίβες με Δυναμική Δέσμευση Μνήμης
ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές
υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες
υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: είκτες στη C++ Οι τελεστές new και delete Destructors Ορισµός τελεστών κλάσεων Ο δείκτης this ΕΠΛ 132 Αρχές Προγραµµατισµού
Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης
Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα
Δομές Δεδομένων (Data Structures)
Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη
Δομές Δεδομένων & Αλγόριθμοι
Λίστες Λίστες - Απλά Συνδεδεμένες Λίστες - Διπλά Συνδεδεμένες Λίστες Είδη Γραμμικών Λιστών Σειριακή Λίστα Καταλαμβάνει συνεχόμενες θέσεις κύριας μνήμης Συνδεδεμένη Λίστα Οι κόμβοι βρίσκονται σε απομακρυσμένες
Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής
Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,
1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι
1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της
Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή
Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.
Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 2: Εμβέλεια Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που
Λειτουργικά Συστήματα (ΗΥ222)
Λειτουργικά Συστήματα (ΗΥ222) Διάλεξη 10: Διαχείριση Μνήμης σε Επίπεδο Χρήστη Δυναμική Διαχείριση Μνήμης Σχεδόν κάθε πρόγραμμα χρησιμοποιεί δυναμική διαχείριση μνήμης Σημαντική βελτίωση λειτουργικότητας
Συλλογές, Στοίβες και Ουρές
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων 1. Ο ζητούμενος ΑΤΔ μπορεί να υλοποιηθεί ως εξής: (i) Διαδοχική χορήγηση μνήμης Υποθέτουμε ότι οι λίστες μας έχουν μέγιστο μέγεθος max και χρησιμοποιούμε τη δομή type elements[max];
Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)
Εγγραφές Δραστηριοποίησης Jackson Pollock, The Key, 1946 (action painting) Κωστής Σαγώνας Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:
int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι
Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι
υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή
υναµική έσµευση Μνήµης (συν.) Στην ενότητα αυτή θα µελετηθούν: Μια εφαρµογή συνδεδεµένων λιστών ιπλά συνδεδεµένες Λίστες ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Εφαρµογή Ζητούµενο: Πρόγραµµα που παίρνει σαν
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού
ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης
ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 3 ο Συνδεδεµένες Λίστες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση ΟΑΤ λίστα Ακολουθιακή λίστα Συνδεδεµένη λίστα
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε
Προγραµµατισµός Ι (ΗΥ120)
Προγραµµατισµός Ι (ΗΥ120) Διάλεξη 15: Διασυνδεµένες Δοµές - Λίστες Δοµές δεδοµένων! Ένα τυπικό πρόγραµµα επεξεργάζεται δεδοµένα Πώς θα τα διατάξουµε? 2 Τι λειτουργίες θέλουµε να εκτελέσουµε? Πώς θα υλοποιήσουµε
Δομές Δεδομένων & Αλγόριθμοι
Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:
υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες
Εγγραφές ραστηριοποίησης
Εγγραφές ραστηριοποίησης Ερώτηση για δέσιµο Κατά την εκτέλεση του προγράµµατος, οι µεταβλητές δένονται (δυναµικά) µε τιµές Οι τιµές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι µεταβλητές πρέπει
Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που
#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα
#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα ηµήτρης Ν. Σερπάνος Εργαστήριο Συστηµάτων Υπολογιστών Τµήµα Ηλεκτρολόγων Μηχ. & Τεχνολογίας Υπολογιστών Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα Αλγόριθµοι:
Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο
Κατακερµατισµός 1 Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο 1. Αρχεία Σωρού 2. Ταξινοµηµένα Αρχεία Φυσική διάταξη των εγγραφών
Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5
Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)
1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 4η 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 10: Στοίβες:Υλοποίηση& Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή
Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)
Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.
ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)
ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS) Ταχεία Αναζήτηση Σε πίνακα: δυαδική αναζήτηση (binary search) σε ταξινοµηµένο πίνακα O(log n) Σε δένδρο: αναζήτηση σε ισοζυγισµένο δένδρο O(log n) Σε λίστα: Μπορούµε
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,
Οι δείκτες στη γλώσσα C
Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων Άσκηση 1 Υποθέτουμε πως οι λίστες είναι υλοποιημένες χρησιμοποιώντας τις πιο κάτω δομές. typedef struct Node{ type data; struct node *next; node; node *top; list; Υλοποιούμε
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ταξινόµηση Mergesort Κεφάλαιο 8 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Ταξινόµηση µε συγχώνευση Αλγόριθµος Mergesort Διµερής συγχώνευση Αφηρηµένη επιτόπου συγχώνευση Αναλυτική ταξινόµηση
Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων
Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,
Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 14-1 Περιεχόμενο
Εικονικές Μηχανές, Διερμηνείς
Εικονικές Μηχανές, Διερμηνείς και Δυναμική Διαχείριση Μνήμης Περιεχόμενα Εικονικές μηχανές (Virtual Machines) Διερμηνείς (Interpreters) Δυναμική διαχείριση μνήμης Στοίβες (Stacks) Σωροί (Heaps) Συλλογή
ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Αντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης
Σύνοψη Προηγούμενου Λίστες (Lists) Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Στοίβες (Stacks) : στην κορυφή της στοίβας ( ) από την κορυφή της στοίβας ( ) Ουρές
Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη
9.1 Γενικά Οι εφαρµογές που δηµιουργούνται από ένα προγραµµατιστή µπορούν ανά πασά στιγµή να καταρρεύσουν από κάποιο λάθος κατά την λειτουργία τους. Αυτές οι καταστάσεις συµβαίνουν από αµέλεια του προγραµµατιστή
4. Συνδεδεμένες Λίστες
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 4. Συνδεδεμένες Λίστες 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 10/11/2016 Εισαγωγή
ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης
ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 4 ο Στοίβα Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Στοίβα Υλοποίηση µε Πίνακα Υλοποίηση
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
ΗΥ-150. Πίνακες (Arrays)
ΗΥ-150 Προγραµµατισµός Πίνακες (Arrays) Προγραµµατισµός Εισαγωγικά Έστω ότι θέλουµε να αποθηκεύσουµε 100 ονόµατα φοιτητών και τους βαθµούς τους. Πως θα το κάναµε αυτό µε µεταβλητές; Πως θα µπορούσαµε να
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συναρτήσεις Εξωτερικές µεταβλητές Κανόνες εµβέλειας ιάρκεια µεταβλητών Αρχικοποίηση
Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.
Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ Δεν κάνει compile και το λάθος είναι σηµαντικό: Το head1 είναι δείκτης σε struct, εποµένως η προσπέλαση πεδίου γίνεται 321 FAIL µε head1->next και όχι head1.next. Επιπλέον, έχετε λάθος
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
ιαφάνειες παρουσίασης #11
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές
Δομές Δεδομένων Ενότητα 4
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση
Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση 1 Ταξινόµηση! Δεδοµένα: Δίνεται ένας πίνακας data από N ακεραίους! Ζητούµενο: Να ταξινοµηθούν τα περιεχόµενα σε αύξουσα αριθµητική σειρά:!i : 0 data[i]
Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων
ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Επανάληψη για τις Τελικές εξετάσεις
Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού
Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δομές Δεδομένων Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Δομές Δεδομένων Μια δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες
ιαφάνειες παρουσίασης #5 (β)
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης
Κλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί
{ int a = 5; { int b = 7; a = b + 3;
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 1: Γλώσσες με δομή block Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως
Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 10-1 Περιεχόμενο Διάλεξης
Αντισταθμιστική ανάλυση
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα
ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014
ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014 Αναζήτηση και Ταξινόµηση Βασικές λειτουργίες σε προγράµµατα Αναζήτηση (searching): Βρες ένα ζητούµενο στοιχείο σε µια