Διαχείριση Μνήμης. Δυναμική δέσμευση μνήμης. Μοντέλο μνήμης. Περιεχόμενα. Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης:
|
|
- Μαργαρίτες Ῥόδη Μαρής
- 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[666]; int[] a = new int[666]; Μπορεί να της ανατεθεί μια αναφορά σε έναν πίνακα με ακέραιες τιμές, αλλά στο παραπάνω παράδειγμα κάποιος τέτοιος πίνακας δεν της έχει ανατεθεί μέχρι στιγμής Διαχείριση μνήμης 5 Διαχείριση μνήμης 6 Χρησιμοποίηση πινάκων στη Java Για να προσπελάσουμε ένα στοιχείο του πίνακα χρησιμοποιούμε την έκφραση a[i] (ως lvalue ή rvalue): όπου a είναι μια έκφραση αναφοράς σε πίνακα και i είναι μια ακέραια έκφραση int i = 0; while (i < a.length) { a[i] = 42; 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 Μιακενήστοίβαμε8 λέξεις. Ηστοίβα μεγαλώνει προς τα κάτω, από μεγάλες σε μικρές διευθύνσεις. Μια προκαθορισμένη θέση μνήμης (ή πιθανόν ένας καταχωρητής) αποθηκεύει τη διεύθυνση της κορυφής της στοίβας (της μικρότερης χρησιμοποιούμενης θέσης μνήμης). Διαχείριση μνήμης 11 top: 4 8 first activation record Το πρόγραμμα καλεί την m.push(3), ηοποία επιστρέφει τη διεύθυνση τηςπρώτηςαπότις3 λέξεις που δεσμεύονται για την εγγραφή δραστηριοποίησης. Η διαχείριση της μνήμης χρησιμοποιεί μια επιπλέον λέξη για να καταγράψει την προηγούμενη τιμή της top. Διαχείριση μνήμης 12
4 top: 1 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 start of 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: p1 = m.allocate(4); Ηαναφοράp1 θα πάρει την τιμή 1, δηλαδή τη διεύθυνση της πρώτης από τις τέσσερις δεσμευμένες λέξεις. Μία επιπλέον λέξη χρησιμοποιείται για να κρατήσει το μέγεθος του μπλοκ. Το υπόλοιπο μέρος του μπλοκ επεστράφη στη list. Start: 5 9: 8: -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 5 Start: 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 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 Έστω η παρακάτω ακολουθία εντολών: Η τελευταία κλήση της allocate θα αποτύχει διότι τα ελεύθερα μπλοκ σπάνε σε μικρά κομμάτια αλλά πουθενά δεν ξαναενώνονται p1 = m.allocate(4); p2 = m.allocate(4); m.deallocate(p1); m.deallocate(p2); p3 = m.allocate(7); Χρειαζόμαστε ένα μηχανισμό ο οποίος συνασπίζει συνεχόμενα γειτονικά μπλοκ που είναι ελεύθερα Διαχείριση μνήμης 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-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 Τρέχοντες Σύνδεσμοι στο Σωρό Start: Διαχείριση μνήμης 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^ := 42; 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), δηλαδή εκτελείται από τη φύση του σε μικρά βήματα και δεν επιβάλλει μεγάλες παύσεις κατά την εκτέλεση του προγράμματος Συλλέκτες γενεών (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
Διαχείριση Μνήμης. Andre Derain, The turning road, Lestraque, Κωστής Σαγώνας Νίκος Παπασπύρου
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
ιαχείριση Μνήµης υναµική δέσµευση µνήµης Μοντέλο µνήµης Περιεχόµενα Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης:
υναµική δέσµευση µνήµης ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων
ιαχείριση Μνήµης υναµική δέσµευση µνήµης Περιεχόµενα Μοντέλο µνήµης ήλωση πινάκων στη Java ηµιουργία πινάκων στη Java
ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 υναµική δέσµευση µνήµης Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων
Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019
Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019 Γλώσσες με δομή Block Γλώσσες με δομή Block Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Βασικές Έννοιες Δοµών Δεδοµένων
Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες
Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )
Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική
Στοίβες με Δυναμική Δέσμευση Μνήμης
ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
Δομές Δεδομένων (Data Structures)
Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη
procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 2: Εμβέλεια Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που
Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής
Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,
Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -
Συλλογές, Στοίβες και Ουρές
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή
Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή
Απλές Δοµές Δεδοµένων Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος
Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)
Εγγραφές Δραστηριοποίησης Jackson Pollock, The Key, 1946 (action painting) Κωστής Σαγώνας Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων 1. Ο ζητούμενος ΑΤΔ μπορεί να υλοποιηθεί ως εξής: (i) Διαδοχική χορήγηση μνήμης Υποθέτουμε ότι οι λίστες μας έχουν μέγιστο μέγεθος max και χρησιμοποιούμε τη δομή type elements[max];
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
Λειτουργικά Συστήματα (ΗΥ222)
Λειτουργικά Συστήματα (ΗΥ222) Διάλεξη 10: Διαχείριση Μνήμης σε Επίπεδο Χρήστη Δυναμική Διαχείριση Μνήμης Σχεδόν κάθε πρόγραμμα χρησιμοποιεί δυναμική διαχείριση μνήμης Σημαντική βελτίωση λειτουργικότητας
Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.
Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:
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 Δοµές Δεδοµένων Ι Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Δομές Δεδομένων & Αλγόριθμοι
Λίστες Λίστες - Απλά Συνδεδεμένες Λίστες - Διπλά Συνδεδεμένες Λίστες Είδη Γραμμικών Λιστών Σειριακή Λίστα Καταλαμβάνει συνεχόμενες θέσεις κύριας μνήμης Συνδεδεμένη Λίστα Οι κόμβοι βρίσκονται σε απομακρυσμένες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων Άσκηση 1 Υποθέτουμε πως οι λίστες είναι υλοποιημένες χρησιμοποιώντας τις πιο κάτω δομές. typedef struct Node{ type data; struct node *next; node; node *top; list; Υλοποιούμε
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε
Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης
Σύνοψη Προηγούμενου Λίστες (Lists) Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Στοίβες (Stacks) : στην κορυφή της στοίβας ( ) από την κορυφή της στοίβας ( ) Ουρές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι
1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Δομές Δεδομένων & Αλγόριθμοι
Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 10: Στοίβες:Υλοποίηση& Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή
ιαφάνειες παρουσίασης #11
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
4. Συνδεδεμένες Λίστες
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 4. Συνδεδεμένες Λίστες 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 10/11/2016 Εισαγωγή
ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Αντισταθμιστική ανάλυση
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα
Εικονικές Μηχανές, Διερμηνείς
Εικονικές Μηχανές, Διερμηνείς και Δυναμική Διαχείριση Μνήμης Περιεχόμενα Εικονικές μηχανές (Virtual Machines) Διερμηνείς (Interpreters) Δυναμική διαχείριση μνήμης Στοίβες (Stacks) Σωροί (Heaps) Συλλογή
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Αντικείμενα μέσα σε αντικείμενα Ορίζουμε κλάσεις για να ορίσουμε τύπους δεδομένων τους οποίους χρειαζόμαστε Π.χ., ο τύπος δεδομένων Date
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές
Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες
Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 0: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 10-1 Περιεχόμενο Διάλεξης
Δομές Δεδομένων Ενότητα 4
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 14-1 Περιεχόμενο
Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δομές Δεδομένων Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Δομές Δεδομένων Μια δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες
Βασικά Στοιχεία της Java
Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό
POINTERS, AGGREGATION, COMPOSITION
POINTERS, AGGREGATION, COMPOSITION POINTERS TO OBJECTS Η κλάση mystring class mystring private: char *s; int size; public: mystring(const char *); ~mystring(); char *GetString(); int GetSize(); ; mystring::mystring(const
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον
{ int a = 5; { int b = 7; a = b + 3;
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 1: Γλώσσες με δομή block Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως
2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων
2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει
Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;
Δείκτες και Δομές Ένας βασικός «δομικός λίθος». Όλη μαζί η δομή (struct) ονομάζεται κόμβος ή Node και αποτελείται από - Το μέλος Info οποιουδήποτε τύπου: int, άλλο struct (InfoField) - To μέλος ink τύπου
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Εισαγωγή στη γλώσσα Java
Εισαγωγή στη γλώσσα Java Franz Marc, Rehe im Walde (II), 1913-14 Κωστής Σαγώνας Νίκος Παπασπύρου Παράδειγμα αντικειμενοστρεφούς τρόπου σκέψης Έγχρωμα σημεία
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Ένα ιστόγραμμα τιμών μετράει για ένα σύνολο από τιμές πόσες φορές εμφανίστηκε η κάθε τιμή. Για παράδειγμα
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού
Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων
Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα
Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα είναι μικρότεροι το 1000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Διάρκεια: 3,5 ώρες Καλή
Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση
Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής
Στοίβες - Ουρές Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής οµές εδοµένων 1 Στοίβα (stack) οµή τύπουlifo: Last In - First Out (τελευταία εισαγωγή πρώτη εξαγωγή) Περιορισµένος
Μεταγλωττιστές Βελτιστοποίηση
Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη, 15780
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2 Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 30/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Συλλογή απορριμμάτων Συλλογή απορριμμάτων (Garbage
Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας (Priority
Εισαγωγή στη γλώσσα Java
Εισαγωγή στη γλώσσα Java Franz Marc, Rehe im Walde (II), 1913-14 Κωστής Σαγώνας Νίκος Παπασπύρου Παράδειγμα αντικειμενοστρεφούς τρόπου σκέψης Έγχρωμα σημεία
Εισαγωγή στον Προγραμματισμό (με. τη C)
Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr