Διαχείριση Μνήμης. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
|
|
- Ακακαλλις Διδασκάλου
- 7 χρόνια πριν
- Προβολές:
Transcript
1 Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906, Σε περίπτωση που είστε ο κάτοχος του κύριου δικαιώματος προβείτε σε επικοινωνία με τη Μονάδα Υλοποίησης Ανοικτών Ακαδημαϊκών Μαθημάτων.
2 Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.
3 Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.
4 Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης: Εγγραφών δραστηριοποίησης Αντικειμένων Άμεσων κλήσεων δέσμευσης μνήμης: new, malloc, κ.λπ. Εμμέσων κλήσεων δέσμευσης μνήμης: δημιουργία συμβολοσειρών, buffers για αρχεία, πινάκωνμεδυναμικά καθοριζόμενο μέγεθος, κ.λπ. Οι υλοποιήσεις των γλωσσών παρέχουν τη δυνατότητα διαχείρισης μνήμης κατά το χρόνο εκτέλεσης του προγράμματος Διαχείριση μνήμης 2
5 Περιεχόμενα Μοντέλο μνήμης με πίνακες στη Java Στοίβες (Stacks) Σωροί (Heaps) Τρέχοντες σύνδεσμοι στο σωρό Συλλογή σκουπιδιών (garbage collection) Διαχείριση μνήμης 3
6 Μοντέλο μνήμης Προς το παρόν, ας υποθέσουμε ότι το λειτουργικό σύστημα παρέχει στο πρόγραμμα μία ή περισσότερες περιοχές μνήμης κάποιου προκαθορισμένου μεγέθους γιαδυναμικήδέσμευση Θα μοντελοποιήσουμε τις περιοχές αυτές ως πίνακες στη Java (Java arrays) Για να δούμε παραδείγματα κώδικα διαχείρισης μνήμης, και Για πρακτική εξάσκηση με τη Java Διαχείριση μνήμης 4
7 Δήλωση πινάκων στη Java Στη Java οι πίνακες ορίζονται ως: int[] a = null; Οι τύποι των πινάκων είναι τύποι αναφοράς ένας πίνακας στην πραγματικότητα είναι ένα αντικείμενο, το οποίο μπορούμε να διαχειριστούμε με κάποια ειδική σύνταξη Στο παραπάνω, η μεταβλητή a αρχικοποιείται σε null Μπορεί να της ανατεθεί μια αναφορά σε έναν πίνακα με ακέραιες τιμές, αλλά στο παραπάνω παράδειγμα κάποιος τέτοιος πίνακας δεν της έχει ανατεθεί μέχρι στιγμής Διαχείριση μνήμης 5
8 Δημιουργία πινάκων στη Java Νέα αντικείμενα πίνακες δημιουργούνται με τη new: Και μπορούμε να συνδυάσουμε τις δύο παραπάνω δηλώσεις σε μία ως εξής: int[] a = null; a = new int[666]; int[] a = new int[666]; Διαχείριση μνήμης 6
9 Χρησιμοποίηση πινάκων στη 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
10 Διαχειριστές μνήμης στη Java public class MemoryManager { private int[] memory; } /** * MemoryManager constructor. initialmemory int[] of memory to manage */ public MemoryManager(int[] initialmemory) { memory = initialmemory; } Ο πίνακας initialmemory είναι μια περιοχή μνήμης που μας δίνεται από το λειτουργικό σύστημα. Διαχείριση μνήμης 8
11 Στοίβες (stacks) Διαχείριση μνήμης 9
12 Στοίβες από εγγραφές δραστηριοποίησης Στις περισσότερες γλώσσες, οι εγγραφές δραστηριοποίησης δεσμεύονται δυναμικά Σε πολλές γλώσσες, επαρκεί να δεσμεύσουμε μια εγγραφή κατά την κλήση μιας συνάρτησης η οποία αποδεσμεύεται κατά την επιστροφή της συνάρτησης Με αυτόν τον τρόπο παράγεται μια στοίβα από εγγραφές δραστηριοποίησης Μιαστοίβαχρειάζεταιένασχετικάαπλόαλγόριθμο διαχείρισης μνήμης Διαχείριση μνήμης 10
13 Εικονογράφηση μιας στοίβας top: 8 7: 6: 5: 4: 3: 2: 1: 0: Μιακενήστοίβαμε8 λέξεις. Η στοίβα μεγαλώνει προς τα κάτω, από μεγάλες σε μικρές διευθύνσεις. Μια προκαθορισμένη θέση μνήμης (ή πιθανόν ένας καταχωρητής) αποθηκεύει τη διεύθυνση της κορυφής της στοίβας (της μικρότερης χρησιμοποιούμενης θέσης μνήμης). Διαχείριση μνήμης 11
14 top: 4 7: 6: 5: 4: 3: 2: 1: 0: 8 first activation record Το πρόγραμμα καλεί την m.push(3), ηοποία επιστρέφει 5: τη διεύθυνση τηςπρώτηςαπότις3 λέξεις που δεσμεύονται για την εγγραφή δραστηριοποίησης. Η διαχείριση της μνήμης χρησιμοποιεί μια επιπλέον λέξη για να καταγράψει την προηγούμενη τιμή της top. Διαχείριση μνήμης 12
15 top: 1 7: 6: 5: 4: 8 first activation record Το πρόγραμμα τώρα καλεί την m.push(2), ηοποία γυρνάει 2: τη διεύθυνση της πρώτης από τις 2 λέξεις που δεσμεύονται για την εγγραφή δραστηριοποίησης. Ηστοίβατώραγέμισε δεν υπάρχει χώρος ούτε για μια κλήση m.push(1). 3: 2: 1: 0: second activation record 4 Για μια κλήση m.pop(), αναθέτουμε top = memory[top] για να επιστρέψουμε στην προηγούμενη κατάσταση. Διαχείριση μνήμης 13
16 Υλοποίηση της μνήμης στοίβας στη 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; } Διαχείριση μνήμης 14
17 } /** * 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
18 Σωροί (heaps) Διαχείριση μνήμης 16
19 Διάταξη σε σωρό Η διάταξη σε στοίβα έχει σχετικά εύκολη υλοποίηση Αλλά δεν επαρκεί πάντα: τι συμβαίνει για παράδειγμα εάν οι δεσμεύσεις και οι αποδεσμεύσεις κομματιών μνήμης ακολουθούν τυχαία σειρά; Ένας σωρός (heap) είναι μία ακολουθία από μπλοκ μνήμης τα οποία μας δίνουν τη δυνατότητα να έχουμε μη ταξινομημένη δέσμευση και αποδέσμευση μνήμης Υπάρχουν πολλοί μηχανισμοί υλοποίησης μνήμης σωρού Διαχείριση μνήμης 17
20 Υλοποίηση μέσω του αλγόριθμου First Fit Ένας σωρός υλοποιείται ως μια συνδεδεμένη λίστα από ελεύθερα μπλοκ (free list) Αρχικά αποτελείται από μόνο ένα μεγάλο μπλοκ Για δέσμευση κάποιου κομματιού μνήμης: Ψάχνουμε στη free list για το πρώτο μπλοκ με μέγεθος τέτοιο ώστε να ικανοποιούνται οι απαιτήσεις της ζήτησης Εάν το μπλοκ που βρήκαμε είναι μεγαλύτερο από τη ζήτηση, τότε επιστρέφουμε το αχρησιμοποίητο κομμάτι του στη free list Ικανοποιούμε την απαίτηση δέσμευσης μνήμης και επιστρέφουμε την αρχική διεύθυνση του δεσμευμένου μπλοκ Για αποδέσμευση, απλώς προσθέτουμε το ελευθερωθέν μπλοκ στην αρχή της free list Διαχείριση μνήμης 18
21 Εικονογράφηση της μνήμης σωρού Ένας διαχειριστής μνήμης σωρού m που αποτελείται από ένα πίνακα από 10 λέξεις, ο οποίος αρχικά είναι κενός. Οσύνδεσμοςστηναρχήτηςfree list κρατιέται στη μεταβλητή freestart. Κάθε μπλοκ, δεσμευμένο ή μη, φυλάει τομέγεθόςτουστηνπρώτηλέξητου. Τα ελεύθερα μπλοκ έχουν ένα σύνδεσμο στο επόμενο μπλοκ της free list στη δεύτερη λέξη τους, ήτηντιμή-1 εάν πρόκειται για το τελευταίο μπλοκ. freestart: 0 9: 8: 7: 6: 5: 4: 3: 2: 1: 0: Διαχείριση μνήμης 19
22 p1 = m.allocate(4); 9: Ηαναφοράp1 θα πάρει την τιμή 1, δηλαδή τη διεύθυνση της πρώτης από τις τέσσερις δεσμευμένες λέξεις. Μία επιπλέον λέξη χρησιμοποιείται για να κρατήσει το μέγεθος του μπλοκ. Το υπόλοιπο μέρος του μπλοκ επεστράφη στη free list. freestart: 5 8: 7: 6: 5: 4: 3: 2: 1: 0: first allocated block Διαχείριση μνήμης 20
23 p1 = m.allocate(4); p2 = m.allocate(2); Ηαναφοράp2 θα πάρει την τιμή 6, δηλαδή τη διεύθυνση της πρώτης από τις δύο δεσμευμένες λέξεις. Μία επιπλέον λέξη χρησιμοποιείται για να κρατήσει το μέγεθος του μπλοκ. Το υπόλοιπο μέρος του μπλοκ επεστράφη στη free list. freestart: 8 9: 8: 7: 6: 5: 4: 3: 2: 1: 0: -1 2 second allocated block 3 5 first allocated block Διαχείριση μνήμης 21
24 p1 = m.allocate(4); p2 = m.allocate(2); m.deallocate(p1); Αποδεσμεύει το πρώτο δεσμευμένο μπλοκ και το επιστρέφει στην κεφαλή της free list. freestart: 0 9: 8: 7: 6: 5: 4: 3: 2: 1: 0: -1 2 second allocated block Διαχείριση μνήμης 22
25 p1 = m.allocate(4); p2 = m.allocate(2); m.deallocate(p1); p3 = m.allocate(1); Ηαναφοράp3 θα πάρει την τιμή 1, δηλαδή τη διεύθυνση της πρώτης δεσμευμένης λέξης. Προσέξτε ότι υπήρχαν δύο μπλοκ που θα μπορούσαν να εξυπηρετήσουν την απαίτηση δέσμευσης. Το άλλο μπλοκ θα προσέφερε ένα τέλειο ταίριασμα και θα επιλέγονταν από το μηχανισμό δέσμευσης μνήμης Best Fit. freestart: 2 9: 8: 7: 6: 5: 4: 3: 2: 1: 0: -1 2 second allocated block third allocated block Διαχείριση μνήμης 23
26 Υλοποίηση της μνήμης σωρού στη Java public class HeapManager { static private final int NULL = -1; // null link public int[] memory; // the memory we manage private int freestart; // start of the free list /** * HeapManager constructor. initialmemory int[] of memory to manage */ public HeapManager(int[] initialmemory) { memory = initialmemory; memory[0] = memory.length; // one big free block memory[1] = NULL; // free list ends with it freestart = 0; // free list starts with it } Διαχείριση μνήμης 24
27 /** * 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 free // list for the first block of sufficient size. int p = freestart; // head of free 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
28 // Now p is the index of a block of sufficient size, // and lag is the index of p's predecessor in the // free list, or NULL, and nextfree is the index of // p's successor in the free 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 free 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) freestart = nextfree; else memory[lag+1] = nextfree; return p+1; // index of useable word (after header) Διαχείριση μνήμης 26
29 } /** * 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] = freestart; freestart = addr; } Διαχείριση μνήμης 27
30 Ένα πρόβλημα Έστω η παρακάτω ακολουθία εντολών: Η τελευταία κλήση της allocate θα αποτύχει διότι τα ελεύθερα μπλοκ σπάνε σε μικρά κομμάτια αλλά πουθενά δε ξαναενώνονται p1 = m.allocate(4); p2 = m.allocate(4); m.deallocate(p1); m.deallocate(p2); p3 = m.allocate(7); Χρειαζόμαστε ένα μηχανισμό ο οποίος συνασπίζει συνεχόμενα γειτονικά μπλοκ που είναι ελεύθερα Διαχείριση μνήμης 28
31 Μια από τις λύσεις του προβλήματος Υλοποιούμε μια πιο έξυπνη μέθοδο deallocate: Διατηρούμε τη λίστα των ελεύθερων μπλοκ ταξινομημένη με βάση τις διευθύνσεις των μπλοκ Όταν ελευθερώνουμε ένα μπλοκ, κοιτάμε το προηγούμενο και το επόμενό του μπλοκ που είναι ελεύθερα Εάν το μπλοκ που ελευθερώνουμε είναι συνεχόμενο με κάποιο από αυτά, τα συνασπίζουμε Η μέθοδος αυτή είναι πιο αποτελεσματική από την απλή τοποθέτηση του μπλοκ στην κεφαλή της free list αλλά όμως είναι και πιο δαπανηρή σε χρόνο εκτέλεσης Διαχείριση μνήμης 29
32 /** * 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 // free list for this block. int p = freestart; int lag = NULL; while (p!= NULL && p < addr) { lag = p; p = memory[p+1]; } Διαχείριση μνήμης 30
33 // Now p is the index of the block to come after // ours in the free list, or NULL, and lag is the // index of the block to come before ours in the // free 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]; } Διαχείριση μνήμης 31
34 } if (lag == NULL) { // ours will be first free freestart = 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; } Διαχείριση μνήμης 32
35 Ελεύθερες λίστες διαχωρισμένες βάσει μεγέθους Τα μικρού (και συνήθως προκαθορισμένου) μεγέθους μπλοκ συνήθως δεσμεύονται και αποδεσμεύονται πολύ πιο συχνά από τα μεγάλου ή τυχαίου μεγέθους μπλοκ Μια συνήθης βελτιστοποίηση: διατηρούμε ξεχωριστές λίστες ελεύθερων μπλοκ για (μικρού) μεγέθους μπλοκ τα οποία είναι δημοφιλή Με άλλα λόγια διαχωρίζουμε τις λίστες με βάση το μέγεθος των μπλοκ που αποθηκεύουν και αναφερόμαστε σε ελεύθερες λίστες διαχωρισμένες βάσει μεγέθους (size-segregated free lists) Διαχείριση μνήμης 33
36 Κατακερματισμός (fragmentation) Λέμε ότι η μνήμη είναι κατακερματισμένη όταν οι ελεύθερες περιοχές διαχωρίζονται από δεσμευμένα μπλοκ, και κατά συνέπεια δεν είναι δυνατό να δεσμεύσουμε όλη την ελεύθερη μνήμη ως ένα μπλοκ Γενικότερα, η μνήμη είναι κατακερματισμένη όταν ο διαχειριστής της μνήμης σωρού δεν είναι σε θέση να εξυπηρετήσει τις αιτήσεις δέσμευσης μνήμης παρόλο που υπάρχει αρκετή ελεύθερη μνήμη συνολικά Διαχείριση μνήμης 34
37 p1 = m.allocate(4); p2 = m.allocate(1); m.deallocate(p1); p3 = m.allocate(5); Η τελευταία δέσμευση θα αποτύχει λόγω τεμαχισμού των ελεύθερων μπλοκ. 9: 8: -1 7: 6: 5: 4: 3 second allocated block 2 3: 2: freestart: 0 1: 0: 7 5 Διαχείριση μνήμης 35
38 Τρέχοντες Σύνδεσμοι στο Σωρό Διαχείριση μνήμης 36
39 Τρέχοντες σύνδεσμοι στο σωρό Μέχρι στιγμής, βλέπαμε το υπό εκτέλεση πρόγραμμα ως ένα μαύρο κουτί που απλώς απαιτεί δεσμεύσεις και αποδεσμεύσεις μνήμης Τι κάνει το πρόγραμμα με τις διευθύνσεις μνήμης που του παραχωρούνται; Τις αποθηκεύει σε κάποια ονόματα (μεταβλητές) Ένας τρέχων σύνδεσμος στο σωρό (current heap link) είναι μια θέση μνήμης που περιέχει μια τιμή η οποία θα χρησιμοποιηθεί από το πρόγραμμα ως δείκτης στο σωρό Διαχείριση μνήμης 37
40 Τρέχοντες σύνδεσμοι στο σωρό a: b: 2 c: 1 (activation record for main) free Στοίβα the stack start: (an IntList) free head: 2 tail: null (a ConsCell) free head: 1 tail: (a ConsCell) free Σωρός the heap IntList a = new IntList(null); int b = 2; int c = 1; a = a.cons(b); a = a.cons(c); Πού είναι οι τρέχοντες σύνδεσμοι στο σωρό στη διπλανή εικόνα; Διαχείριση μνήμης 38
41 Εύρεση των τρεχόντων συνδέσμων στο σωρό Αρχίζουμε με ένα σύνολο ριζών (root set): θέσεις μνήμης εκτός του σωρού που περιέχουν συνδέσμους σε θέσεις μνήμης στο σωρό, π.χ. σε ενεργές εγγραφές δραστηριοποίησης (στη στοίβα) καθολικές ή στατικές μεταβλητές Για κάθε στοιχείο του συνόλου, κοιτάμε το δεσμευμένο μπλοκ στο οποίο δείχνει ο σύνδεσμος και προσθέτουμε όλες τις θέσεις μνήμης του συγκεκριμένου μπλοκ στο σύνολό μας Επαναλαμβάνουμε την παραπάνω διαδικασία μέχρις του σημείου όπου δε βρίσκουμε άλλες νέες θέσεις μνήμης Διαχείριση μνήμης 39
42 Λάθη κατά την εύρεση των τρεχόντων συνδέσμων Παραλείψεις: ξεχνάμε να περιλάβουμε μια θέση μνήμης που έχει έναν τρέχοντα σύνδεσμο στο σωρό Άχρηστες τιμές: συμπεριλαμβάνουμε θέσεις μνήμης για τις οποίες το πρόγραμμα ποτέ δε θα χρησιμοποιήσει τις τιμές που αποθηκεύουν Διευθύνσεις που δεν είναι θέσεις μνήμης: συμπεριλαμβάνουμε κάποιες θέσεις μνήμης στο σωρό μόνο και μόνο επειδή δε μπορούμε να ξεχωρίσουμε τιμές που χρησιμοποιούνται π.χ. ως δείκτες στο σωρό ή ως ακέραιοι (με τιμή που φαίνεται ως μια διεύθυνση μνήμης στο σωρό) Διαχείριση μνήμης 40
43 Δεμπορούμεπάντανααποφύγουμεταλάθη Για τη σωστή διαχείριση του σωρού, τα λάθη παράλειψης είναι μη αποδεκτά και δε συγχωρούνται Άρα είμαστε υποχρεωμένοι να συμπεριλάβουμε όλες τις θέσεις μνήμης για τις οποίες υπάρχει πιθανότητα η τιμή που αποθηκεύεται στη συγκεκριμένη θέση μνήμης να χρησιμοποιηθεί από το πρόγραμμα Κατά συνέπεια, το να συμπεριλάβουμε άχρηστες θέσεις μνήμης στον υπολογισμό είναι αναπόφευκτο Ανάλογα με τη γλώσσα, μπορεί να είναι αδύνατο να αποφύγουμε να συμπεριλάβουμε και τιμές που απλώς δείχνουν σαν θέσεις μνήμης στο σωρό Διαχείριση μνήμης 41
44 Τιμές που δείχνουν σαν διευθύνσεις μνήμης Για κάποιες μεταβλητές μπορεί να μην είμαστε σε θέση να καταλάβουμε πώς χρησιμοποιούνται οι τιμές τους Για παράδειγμα, η παρακάτω μεταβλητή x μπορεί να χρησιμοποιηθεί είτε ως δείκτης είτε ως πίνακας από τέσσερις χαρακτήρες union { char *p; char tag[4]; } x; Σημείωση: το παραπάνω πρόβλημα είναι ακόμα χειρότερο στη C, διότι οι C compilers δεν κρατούν πληροφορία για τους τύπους των μεταβλητών κατά τη διάρκεια εκτέλεσης του προγράμματος Διαχείριση μνήμης 42
45 Συμπίεση του σωρού (heap compaction) Μια λειτουργία που χρειάζεται πληροφορία για το σύνολο των τρεχόντων συνδέσμων στο σωρό Ο διαχειριστής της μνήμης μετακινεί δεσμευμένα μπλοκ: Αντιγράφει το μπλοκ σε μια νέα θέση, και Επικαιροποιεί όλους τους συνδέσμους στο (ή κάπου μέσα στο) μπλοκ Κατά συνέπεια συμπιέζει το σωρό, μετακινώντας όλα τα δεσμευμένα μπλοκ στο ένα άκρο του και αφήνοντας ένα μεγάλο ελεύθερο μπλοκ χωρίς κατακερματισμό Διαχείριση μνήμης 43
46 Συλλογή Σκουπιδιών Διαχείριση μνήμης 44
47 Κάποια συνηθισμένα προβλήματα με δείκτες type p: ^Integer; begin new(p); p^ := 42; dispose(p); p^ := p^ + 1 end Ξεκρέμαστος δείκτης: το διπλανό πρόγραμμα Pascal χρησιμοποιεί ένα δείκτη σε μπλοκ μνήμης και μετά την αποδέσμευση του συγκεκριμένου μπλοκ procedure Leak; type p: ^Integer; begin new(p) end; Διαρροή μνήμης: το διπλανό πρόγραμμα Pascal δεσμεύει ένα μπλοκ μνήμης αλλά ξεχνάει να το αποδεσμεύσει Διαχείριση μνήμης 45
48 Συλλογή σκουπιδιών (garbage collection) Αφού τόσα σφάλματα λογισμικού συμβαίνουν λόγω λαθών αποδέσμευσης μνήμης και επειδή δεν είναι βολικό για τον προγραμματιστή να σκέφτεται για το πώς θα γίνει σωστά η αποδέσμευση μνήμης για ποιο λόγο να μην είναι ευθύνη της υλοποίησης της γλώσσας η αυτόματη ανακύκλωση μνήμης; Διαχείριση μνήμης 46
49 Τρεις βασικοί μηχανισμοί ανακύκλωσης μνήμης 1. Μαρκάρισμα και σκούπισμα (mark and sweep) 2. Αντιγραφή (copying) 3. Μέτρημα αναφορών (reference counting) Διαχείριση μνήμης 47
50 Μαρκάρισμα και σκούπισμα Ένας συλλέκτης μαρκαρίσματος και σκουπίσματος (mark-and-sweep collector) χρησιμοποιεί τους τρέχοντες συνδέσμους στο σωρό σε μια διαδικασία που έχει δύο φάσεις: Μαρκάρισμα: βρίσκουμε όλους τους τρέχοντες συνδέσμους στο σωρό και μαρκάρουμε όλα τα μπλοκ του σωρού τα οποία δείχνονται από κάποιον από τους συνδέσμους Σκούπισμα: κάνουμε ένα πέρασμα στο σωρό και επιστρέφουμε τα αμαρκάριστα μπλοκ στη λίστα με τα ελεύθερα μπλοκ Τα μπλοκ που μαρκάρονται στην πρώτη φάση του αλγόριθμου δε μετακινούνται (non-moving collector) Διαχείριση μνήμης 48
51 Συλλογή σκουπιδιών μέσω αντιγραφής Ένας συλλέκτης αντιγραφής (copying collector) διαιρεί τη μνήμη σε δύο κομμάτια και χρησιμοποιεί τη μισή μόνο μνήμη για να ικανοποιήσει τις αιτήσεις δέσμευσης Όταν το μισό αυτό μέρος γεμίσει, βρίσκουμε συνδέσμους που δείχνουν σε μπλοκ στο πρώτο μισό και αντιγράφουμε αυτά τα μπλοκ στο δεύτερο μισό Η διαδικασία αυτή συμπιέζει τα χρησιμοποιούμενα μπλοκ, με αποτέλεσμα να εξαφανίζει τον κατακερματισμό Συλλέκτης μετακίνησης (moving collector) μπλοκ Διαχείριση μνήμης 49
52 Μέτρημα αναφορών Κάθε μπλοκ έχει ένα μετρητή που κρατάει τον αριθμό των συνδέσμων σωρού που δείχνουν στο μπλοκ Ο μετρητής αυτός αυξάνεται όταν κάποιος σύνδεσμος προς το μπλοκ δημιουργηθεί (π.χ. μέσω ανάθεσης), και μειώνεται όταν κάποιος σύνδεσμος χαθεί Όταν η τιμή του μετρητή γίνει μηδέν, το μπλοκ είναι άχρηστο και μπορεί να ελευθερωθεί Δηλαδή στη διαχείριση μνήμης με μέτρημα αναφορών δε χρειάζεται να βρούμε δυναμικά τους τρέχοντες συνδέσμους στο σωρό Διαχείριση μνήμης 50
53 Πρόβλημα μετρήματος αναφορών circle: link: 2 (activation record) free Στοίβα the stack free link: free link: free Σωρός the heap 1 1 Ένα πρόβλημα μετρήματος αναφορών: δε μπορούμε να ανακαλύψουμε κύκλους από άχρηστα μπλοκ. Στην εικόνα, μια κυκλικά συνδεδεμένη λίστα που δείχνεται από τη μεταβλητή circle. Διαχείριση μνήμης 51
54 Πρόβλημα μετρήματος αναφορών circle: null link: 1 (activation record) free the stack Στοίβα free link: free link: free Σωρός the heap 1 1 Αν αναθέσουμε π.χ. την τιμή null στη μεταβλητή circle, η τιμή του μετρητή θα μειωθεί. Κανένας μετρητής αναφορών δε γίνεται μηδέν, παρόλο που όλα τα μπλοκ είναι άχρηστα (σκουπίδια). Διαχείριση μνήμης 52
55 Μέτρημα αναφορών Δε μπορεί να συλλέξει κύκλους σκουπιδιών Επιβάλλει κάποιο μη αμελητέο κόστος στην εκτέλεση του προγράμματος, λόγω της ανάγκης να ενημερώσουμε τους μετρητές αναφορών σε κάθε ανάθεση Ένα πλεονέκτημα: ο αλγόριθμος είναι αυξητικός (incremental), δηλαδή εκτελείται από τη φύση του σε μικρά βήματα και δεν επιβάλλει μεγάλες παύσεις κατά την εκτέλεση του προγράμματος Διαχείριση μνήμης 53
56 Εκλεπτυσμένοι συλλέκτες σκουπιδιών Συλλέκτες γενεών (Generational collectors) Η προς συλλογή μνήμη χωρίζεται σε γενιές (generations) με βάση την ηλικία των αντικειμένων στο μπλοκ Συλλέγουμε τα σκουπίδια στις νέες γενιές πιο συχνά (χρησιμοποιώντας κάποια από τις προηγούμενες μεθόδους) Αυξητικοί συλλέκτες (Incremental collectors) Συλλέγουν σκουπίδια σε μικρά χρονικά διαστήματα τα οποία παρεμβάλλονται με την εκτέλεση του προγράμματος Κατά συνέπεια αποφεύγουν το σταμάτημα της εφαρμογής για μεγάλο χρονικό διάστημα και οι παύσεις λόγω αυτόματης ανακύκλωσης μνήμης έχουν πολύ μικρή διάρκεια Διαχείριση μνήμης 54
57 Γλώσσες με αυτόματη διαχείριση μνήμης Σε κάποιες γλώσσες η αυτόματη διαχείριση μνήμης είναι απαίτηση: Lisp, Scheme, ML, Haskell, Erlang, Clean, Prolog, Java, C# Κάποιες άλλες, όπως η Ada, απλώς την ενθαρρύνουν Τέλος, κάποιες άλλες γλώσσες όπως η C και η C++ την καθιστούν πολύ δύσκολη Όμως ακόμα και για αυτές είναι δυνατή σε κάποιο βαθμό Υπάρχουν βιβλιοθήκες που αντικαθιστούν τη συνηθισμένη υλοποίηση των malloc/free με ένα διαχειριστή μνήμης που χρησιμοποιεί συντηρητική συλλογή σκουπιδιών (conservative garbage collection) για την αυτόματη ανακύκλωση μνήμης Διαχείριση μνήμης 55
58 Τάσεις στην αυτόματη διαχείριση μνήμης Μια ιδέα από τις αρχές του 1960, η δημοτικότητα της οποίας έχει αυξηθεί σημαντικά τα τελευταία χρόνια Οι καλές υλοποιήσεις των συλλεκτών σκουπιδιών έχουν επίδοση παρόμοια με, ή μόνο κατά λίγο χειρότερη από, αυτήν η οποία είναι δυνατή με διαχείριση μνήμης υπό τον έλεγχο του προγραμματιστή Όλο και περισσότεροι προγραμματιστές συνειδητοποιούν ότι η αυτόματη ανακύκλωση μνήμης αυξάνει την παραγωγικότητά τους, οδηγεί σε λιγότερα σφάλματα, και κατά συνέπεια αξίζει τον έξτρα χρόνο εκτέλεσης Διαχείριση μνήμης 56
59 Συμπερασματικά Η διαχείριση μνήμης είναι ένα σημαντικό συστατικό των αποφάσεων σχεδιασμού καθώς και των συστημάτων υλοποίησης των γλωσσών προγραμματισμού Τόσο η επίδοση όσο και η αξιοπιστία των προγραμμάτων είναι σημαντικοί παράγοντες της ανάπτυξης λογισμικού Η αυτόματη διαχείριση μνήμης είναι μια από τις πιο ενεργές περιοχές ερευνητικής δραστηριότητας και πειραματισμού στην περιοχή της υλοποίησης γλωσσών προγραμματισμού Διαχείριση μνήμης 57
60 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Διαχείριση Μνήμης. Andre Derain, The turning road, Lestraque, Κωστής Σαγώνας Νίκος Παπασπύρου
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Δυναμική δέσμευση μνήμης. Μοντέλο μνήμης. Περιεχόμενα. Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης:
Διαχείριση Μνήμης 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 Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια
{ int a = 5; { int b = 7; a = b + 3;
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 1: Γλώσσες με δομή block Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως
procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 2: Εμβέλεια Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Δομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Βασικές Έννοιες Δοµών Δεδοµένων
Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
Δομές Δεδομένων Ενότητα 4
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )
Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Δομές Δεδομένων (Data Structures)
Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη
Στοίβες με Δυναμική Δέσμευση Μνήμης
ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές
Εισαγωγή στον δομημένο προγραμματισμό
Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής
Προχωρημένες έννοιες προγραμματισμού σε C
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr)
Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή
Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής
Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν
Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής
Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή
Απλές Δοµές Δεδοµένων Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος
Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Δομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 9: Συναρτήσεις Εμβέλεια Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων
Συλλογές, Στοίβες και Ουρές
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει
Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.
Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
Λειτουργικά Συστήματα (ΗΥ222)
Λειτουργικά Συστήματα (ΗΥ222) Διάλεξη 10: Διαχείριση Μνήμης σε Επίπεδο Χρήστη Δυναμική Διαχείριση Μνήμης Σχεδόν κάθε πρόγραμμα χρησιμοποιεί δυναμική διαχείριση μνήμης Σημαντική βελτίωση λειτουργικότητας
Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών
Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 7: Υπορουτίνες Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction)
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 Δοµές Δεδοµένων Ι Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε
Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Οργάνωση Υπολογιστών Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών Μανόλης Γ.Η. Κατεβαίνης Τμήμα Επιστήμης Υπολογιστών Άδειες Χρήσης Το παρόν εκπαιδευτικό
ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός
ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης CreativeCommons.
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:
Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 6: Πίνακες και Δείκτες Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων 1. Ο ζητούμενος ΑΤΔ μπορεί να υλοποιηθεί ως εξής: (i) Διαδοχική χορήγηση μνήμης Υποθέτουμε ότι οι λίστες μας έχουν μέγιστο μέγεθος max και χρησιμοποιούμε τη δομή type elements[max];
Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)
Εγγραφές Δραστηριοποίησης Jackson Pollock, The Key, 1946 (action painting) Κωστής Σαγώνας Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με
Αρχιτεκτονική Υπολογιστών
Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 6: Διαδικασίες, Σωρός, Διαφανείς συναρτήσεις Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 10: Στοίβες:Υλοποίηση& Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή
Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Προγραμματισμός H/Y Ενότητα 4: Δείκτες Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Δομές Δεδομένων & Αλγόριθμοι
Λίστες Λίστες - Απλά Συνδεδεμένες Λίστες - Διπλά Συνδεδεμένες Λίστες Είδη Γραμμικών Λιστών Σειριακή Λίστα Καταλαμβάνει συνεχόμενες θέσεις κύριας μνήμης Συνδεδεμένη Λίστα Οι κόμβοι βρίσκονται σε απομακρυσμένες
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής
Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,
Αντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 11: Χειρισμός Σφαλμάτων Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Ηλεκτρονικοί Υπολογιστές
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 9: Πίνακες στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ
ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης
Σύνοψη Προηγούμενου Λίστες (Lists) Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Στοίβες (Stacks) : στην κορυφή της στοίβας ( ) από την κορυφή της στοίβας ( ) Ουρές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι
1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες
Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε
Φροντιστήριο 4 Σκελετοί Λύσεων
Φροντιστήριο 4 Σκελετοί Λύσεων Άσκηση 1 Υποθέτουμε πως οι λίστες είναι υλοποιημένες χρησιμοποιώντας τις πιο κάτω δομές. typedef struct Node{ type data; struct node *next; node; node *top; list; Υλοποιούμε
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
Δομές Δεδομένων & Αλγόριθμοι
Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές
Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
Εγγραφές Δραστηριοποίησης
Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει
Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες
Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 6: Κατανομή και Δυναμική Διαχείριση Μνήμης, τελεστές new και delete, υπερφόρτωση μονομελών τελεστών Το περιεχόμενο
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δομές Δεδομένων Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Δομές Δεδομένων Μια δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες
Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ
Μεταγλωττιστές Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Ειδικά Θέματα Προγραμματισμού
Ειδικά Θέματα Προγραμματισμού Ενότητα 3: Τύποι Δεδομένων - Τελεστές Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 14-1 Περιεχόμενο
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Πίνακες & Δείκτες ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πίνακες Πίνακες Τα στοιχεία
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Αντικείμενα μέσα σε αντικείμενα Ορίζουμε κλάσεις για να ορίσουμε τύπους δεδομένων τους οποίους χρειαζόμαστε Π.χ., ο τύπος δεδομένων Date
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT
ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int
1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ www.cslab.ece.ntua.gr 1 η ΑΣΚΗΣΗ ΣΤΗΝ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
Δομές Δεδομένων Ενότητα 3
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 3: Στοίβα Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Διαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
4. Συνδεδεμένες Λίστες
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 4. Συνδεδεμένες Λίστες 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 10/11/2016 Εισαγωγή
Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 10-1 Περιεχόμενο Διάλεξης
Δομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 6: Πίνακες Κώστας Κουκουλέτσος, Καθηγητής Τμήμα Η.Υ.Σ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό
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
Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;
Δείκτες και Δομές Ένας βασικός «δομικός λίθος». Όλη μαζί η δομή (struct) ονομάζεται κόμβος ή Node και αποτελείται από - Το μέλος Info οποιουδήποτε τύπου: int, άλλο struct (InfoField) - To μέλος ink τύπου
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Δομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Αλγόριθμοι Αναζήτησης
Αλγόριθμοι Αναζήτησης ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.