Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Σχετικά έγγραφα
procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

{ int a = 5; { int b = 7; a = b + 3;

Διαχείριση Μνήμης. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Διαχείριση Μνήμης. Andre Derain, The turning road, Lestraque, Κωστής Σαγώνας Νίκος Παπασπύρου

Διαχείριση Μνήμης. Δυναμική δέσμευση μνήμης. Μοντέλο μνήμης. Περιεχόμενα. Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης:

Εγγραφές Δραστηριοποίησης

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Αρχές Γλωσσών Προγραμματισμου Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2015 Χρήστος Νομικός ( Τμήμα Μηχανικών Αρχές

Εγγραφές Δραστηριοποίησης. Jackson Pollock, The Key, 1946 (action painting)

Εγγραφές Δραστηριοποίησης

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Λειτουργικά Συστήματα (ΗΥ222)

Δομημένος Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

Πρόβλημα 37 / σελίδα 207

Ανάπτυξη και Σχεδίαση Λογισμικού

Λειτουργικά Συστήματα Η/Υ

Προγραμματισμός Ι (ΗΥ120)

ΑΕΠΠ Ερωτήσεις θεωρίας

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ιαχείριση Μνήµης υναµική δέσµευση µνήµης Μοντέλο µνήµης Περιεχόµενα Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης:

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ιαχείριση Μνήµης υναµική δέσµευση µνήµης Περιεχόµενα Μοντέλο µνήµης ήλωση πινάκων στη Java ηµιουργία πινάκων στη Java

Μαλούτα Θεανώ Σελίδα 1

Θέματα ΑΕΠΠ Πανελλήνιες Εξετάσεις 2008

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διαδικασιακός Προγραμματισμός

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

Προγραμματισμός ΙI (Θ)

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Κεφάλαιο 10 ο Υποπρογράµµατα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 31 MAΪΟΥ ΑΕΠΠ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ

Εισαγωγή στον Προγραμματισμό

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 12 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Ανάπτυξη και Σχεδίαση Λογισμικού

Τεχνικές Συλλογής Σκουπιδιών στη Διαχείριση Μνήμης ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Διαδικασιακός Προγραμματισμός

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΘΕΜΑ 1 ο ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Α4. Όσο επανάλαβε Τέλος_επανάληψης Εμφάνισε Για από μέχρι με_βήμα. Όσο επανάλαβε (Μονάδες 5) Α5. Α[10, 5] Π, Για από μέχρι (1) Για από μέχρι (2) Αν

ΘΕΜΑ 1 ο ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Εικονική Μνήμη (1/2)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΒΙΒΛΙΑ ΒΙΒΛΙΑ

Τι είναι; Ο Πίνακας Συμβόλων είναι όπως ένα λεξικό:

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Β. 1. Το διάγραμμα ροής του παραπάνω αποσπάσματος είναι το παρακάτω: I< 10 Εμφάνισε I Ι Ι + 3

Λειτουργικά Συστήματα (Λ/Σ)

Βασικά Στοιχεία της Java

Εγγραφές ραστηριοποίησης

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Αρχιτεκτονική Υπολογιστών

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον Προγραμματισμό (με. τη C)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΣΠΟΥΔΩΝ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Χρησιμοποιώντας συναρτήσεις

ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Θέματα Μεταγλωττιστών

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εικονικές Μηχανές, Διερμηνείς

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Κεφάλαιο 10. Υποπρογράμματα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) 2008

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Διαδικασίες και συναρτήσεις. 22 Νοε 2008 Ανάπτυξη εφαρμογών/ Υποπρογράμματα 1

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Transcript:

Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019

Γλώσσες με δομή Block

Γλώσσες με δομή Block

Απλό μοντέλο Μηχανής Εκτέλεσης

Διαχείριση Μνήμης

Εμβέλεια και διάρκεια ζωής

Εμβέλεια και διάρκεια ζωής

Inline - Blocks

Εγγραφές ενεργοποίησης για Inline Blocks

Παράδειγμα εκτέλεσης για inline Block 1/4

Παράδειγμα εκτέλεσης για inline Block 2/4

Παράδειγμα εκτέλεσης για inline Block 3/4

Παράδειγμα εκτέλεσης για inline Block 4/4

Στατική και Δυναμική εμβέλεια Για τα Inline Blocks οι δύο εμβέλειες ταυτίζονται

Συναρτήσεις και υποπρογράμματα

Εγγραφές ενεργοποίησης υποπρογραμμάτων

Πέρασμα παραμέτρων (1/3)

Πέρασμα παραμέτρων (2/3)

Πέρασμα παραμέτρων (3/3)

Παράδειγμα 1 (14/09/2015)

Παράδειγμα 1 (22/06/2015)

Οργάνωση ΧΔ (Χώρου Δεδομένων) για την Εκτέλεση Στατικά δεδομένα Αρχικές τιμές στατικών δεδομένων Δεδομένα στοίβας Στοίβα και εγγραφήματα δραστηριοποίησης Μέγεθος εγγραφήματος δραστηριοποίησης Παράμετροι συναρτήσεων Δέσιμο μεταβλητών Στατικό / δυναμικό Δυναμική παραχώρηση μνήμης

Συνολικός Χώρος Δεδομένων

Στατικά Δεδομένα Σταθερή και μοναδική θέση μνήμης για κάθε δεδομένο που καθορίζεται στατικά από το μεταγλωττιστή Διάρκεια ζωής ολόκληρη η διάρκεια εκτέλεσης του προγράμματος Αρχικές τιμές που μπορούν να αποδοθούν από το μεταγλωττιστή και να φορτωθούν στη μνήμη μαζί με τον κώδικα του προγράμματος

Δεδομένα Στοίβας Μεταβλητή θέση μνήμης για κάθε δεδομένο με πολλαπλά ταυτόχρονα ενεργά αντίγραφα Τοποθέτηση στα εγγραφήματα δραστηριοποίησης της στοίβας με στατικά καθορισμένη μετατόπιση από την αρχή τους Διάρκεια ζωής η διάρκεια ενεργοποίησης της αντίστοιχης εμβέλειας του προγράμματος

Εγγράφημα Δραστηριοποίησης Τοπικές μεταβλητές Τυπικές παράμετροι Θέση αποτελέσματος συνάρτησης Άλλες βοηθητικές θέσεις Διεύθυνση επανόδου στο καλούν περιβάλλον Σύνδεσμοι προσπέλασης Άλλες προσωρινές μεταβλητές Διαχυμένες τιμές καταχωρητών Στατικά καθορισμένο μέγεθος

Παράμετροι Συναρτήσεων και Μέθοδοι Περάσματος Κατ αξία πέρασμα τιμής Κατ αναφορά πέρασμα διεύθυνσης Κατ όνομα πέρασμα κώδικα πολλαπλές αποτιμήσεις Κατ ανάγκη πέρασμα κώδικα μία αποτίμηση Κατ αξία και αποτέλεσμα

Στατικό / Δυναμικό Δέσιμο

Σύνδεσμοι Προσπέλασης Στατικό δέσιμο Δείκτης στο ΕΔ της αμέσως πιο εξωτερικής συνάρτησης Παρακολούθηση του φωλιάσματος δηλώσεων και εύκολη ενημέρωση Πίνακες δεικτών για όλες τις διαδοχικά εξωτερικότερες συναρτήσεις Δυναμικό δέσιμο Πιο δύσκολη ενημέρωση, αλλά άμεση εύρεση του ΕΔ Υλοποίηση!

Δυναμική Παραχώρηση Μνήμης Τήρηση λίστας μπλοκ Σταθερό/μεταβλητό μέγεθος μπλοκ Δέσμευση μπλοκ Μέσω εντολής (πχ malloc, new) Αυτόματα με κάποια ανάθεση Απελευθέρωση Μέσω εντολής (πχ free, dispose) Aυτόματα με μηχανισμό συλλογής σκουπιδιών

Συλλογή Σκουπιδιών Μέτρηση αναφορών Ένας μετρητής για κάθε αντικείμενο Αρχικοποίηση, αυξομείωση, μηδενισμός για συλλογή Συνεχής επιβάρυνση του προγράμματος Αδυναμία χειρισμού κύκλων Διαπέραση όλων των δεικτών Αντικείμενα βάσης Διαπέραση, μαρκάρισμα, συλλογή αμαρκάριστων Σπάνια, αλλά υψηλή επιβάρυνση του προγράμματος Βρίσκει όλα τα σκουπίδια

Προσπέλαση σε καθολικές μεταβλητές: Στατική εμβέλεια (1/3)

Προσπέλαση σε καθολικές μεταβλητές: Στατική εμβέλεια (2/3)

Προσπέλαση σε καθολικές μεταβλητές: Στατική εμβέλεια (3/3)

Εγγραφές ενεργοποίησης για στατική εμβέλεια

Κανόνες εμβέλειας στις ΓΠ (1/2)

Κανόνες εμβέλειας στις ΓΠ (2/2)

Διαχείριση μνήμης στις ΓΠ (1/7)

Διαχείριση μνήμης στις ΓΠ (2/7)

Διαχείριση μνήμης στις ΓΠ (3/7)

Διαχείριση μνήμης στις ΓΠ (4/7)

Διαχείριση μνήμης στις ΓΠ (5/7)

Διαχείριση μνήμης στις ΓΠ (6/7)

Διαχείριση μνήμης στις ΓΠ (7/7)

Συλλογή Σκουπιδιών

Συλλογή σκουπιδιών (garbage collection) Αφού τόσα σφάλματα λογισμικού συμβαίνουν λόγω λαθών αποδέσμευσης μνήμης και επειδή δεν είναι βολικό για τον προγραμματιστή να σκέφτεται για το πώς θα γίνει σωστά η αποδέσμευση μνήμης για ποιο λόγο να μην είναι ευθύνη της υλοποίησης της γλώσσας η αυτόματη ανακύκλωση μνήμης;

Τρεις βασικοί μηχανισμοί ανακύκλωσης μνήμης 1. Μαρκάρισμα και σκούπισμα (mark and sweep) 2. Αντιγραφή (copying) 3. Μέτρημα αναφορών (reference counting)

Μαρκάρισμα και σκούπισμα Ένας συλλέκτης μαρκαρίσματος και σκουπίσματος (mark-and-sweep collector) χρησιμοποιεί τους τρέχοντες συνδέσμους στο σωρό σε μια διαδικασία που έχει δύο φάσεις: Μαρκάρισμα: βρίσκουμε όλους τους τρέχοντες συνδέσμους στο σωρό και μαρκάρουμε όλα τα μπλοκ του σωρού τα οποία δείχνονται από κάποιον από τους συνδέσμους Σκούπισμα: κάνουμε ένα πέρασμα στο σωρό και επιστρέφουμε τα αμαρκάριστα μπλοκ στη λίστα με τα ελεύθερα μπλοκ Τα μπλοκ που μαρκάρονται στην πρώτη φάση του αλγόριθμου δε μετακινούνται (non-moving collector)

Συλλογή σκουπιδιών μέσω αντιγραφής Ένας συλλέκτης αντιγραφής (copying collector) διαιρεί τη μνήμη σε δύο κομμάτια και χρησιμοποιεί τη μισή μόνο μνήμη για να ικανοποιήσει τις αιτήσεις δέσμευσης Όταν το μισό αυτό μέρος γεμίσει, βρίσκουμε συνδέσμους που δείχνουν σε μπλοκ στο πρώτο μισό και αντιγράφουμε αυτά τα μπλοκ στο δεύτερο μισό Η διαδικασία αυτή συμπιέζει τα χρησιμοποιούμενα μπλοκ, με αποτέλεσμα να εξαφανίζει τον κατακερματισμό Συλλέκτης μετακίνησης (moving collector) μπλοκ

Μέτρημα αναφορών Κάθε μπλοκ έχει ένα μετρητή που κρατάει τον αριθμό των συνδέσμων σωρού που δείχνουν στο μπλοκ Ο μετρητής αυτός αυξάνεται όταν κάποιος σύνδεσμος προς το μπλοκ δημιουργηθεί (π.χ. μέσω ανάθεσης), και μειώνεται όταν κάποιος σύνδεσμος χαθεί Όταν η τιμή του μετρητή γίνει μηδέν, το μπλοκ είναι άχρηστο και μπορεί να ελευθερωθεί Δηλαδή στη διαχείριση μνήμης με μέτρημα αναφορών δε χρειάζεται να βρούμε δυναμικά τους τρέχοντες συνδέσμους στο σωρό

Πρόβλημα μετρήματος αναφορών

Πρόβλημα μετρήματος αναφορών

Μέτρημα αναφορών Δε μπορεί να συλλέξει κύκλους σκουπιδιών Επιβάλλει κάποιο μη αμελητέο κόστος στην εκτέλεση του προγράμματος, λόγω της ανάγκης να ενημερώσουμε τους μετρητές αναφορών σε κάθε ανάθεση Ένα πλεονέκτημα: ο αλγόριθμος είναι αυξητικός (incremental), δηλαδή εκτελείται από τη φύση του σε μικρά βήματα και δεν επιβάλλει μεγάλες παύσεις κατά την εκτέλεση του προγράμματος

Εκλεπτυσμένοι συλλέκτες σκουπιδιών Συλλέκτες γενεών (Generational collectors) Η προς συλλογή μνήμη χωρίζεται σε γενιές(generations)με βάση την ηλικία των αντικειμένων στο μπλοκ Συλλέγουμε τα σκουπίδια στις νέες γενιές πιο συχνά (χρησιμοποιώντας κάποια από τις προηγούμενες μεθόδους) Αυξητικοί συλλέκτες (Incremental collectors) Συλλέγουν σκουπίδια σε μικρά χρονικά διαστήματα τα οποία παρεμβάλλονται με την εκτέλεση του προγράμματος Κατά συνέπεια αποφεύγουν το σταμάτημα της εφαρμογής για μεγάλο χρονικό διάστημα και οι παύσεις λόγω αυτόματης ανακύκλωσης μνήμης έχουν πολύ μικρή διάρκεια

Γλώσσες με αυτόματη διαχείριση μνήμης Σε κάποιες γλώσσες η αυτόματη διαχείριση μνήμης είναι απαίτηση: Lisp, Scheme, ML, Haskell, Erlang, Clean, Prolog, Java, C#,... Κάποιες άλλες, όπως η Ada, απλώς την ενθαρρύνουν Τέλος, κάποιες άλλες γλώσσες όπως η C και η C++ την καθιστούν πολύ δύσκολη Όμως ακόμα και για αυτές είναι δυνατή σε κάποιο βαθμό Υπάρχουν βιβλιοθήκες που αντικαθιστούν τη συνηθισμένη υλοποίηση των malloc/free με ένα διαχειριστή μνήμης που χρησιμοποιεί συντηρητική συλλογή σκουπιδιών (conservative garbage collection) για την αυτόματη ανακύκλωση μνήμης

Τάσεις στην αυτόματη διαχείριση μνήμης Μια ιδέα από τις αρχές του 1960, η δημοτικότητα της οποίας έχει αυξηθεί σημαντικά τα τελευταία χρόνια Οι καλές υλοποιήσεις των συλλεκτών σκουπιδιών έχουν επίδοση παρόμοια με, ή μόνο κατά λίγο χειρότερη από, αυτήν η οποία είναι δυνατή με διαχείριση μνήμης υπό τον έλεγχο του προγραμματιστή Όλο και περισσότεροι προγραμματιστές συνειδητοποιούν ότι η αυτόματη ανακύκλωση μνήμης αυξάνει την παραγωγικότητά τους, οδηγεί σε λιγότερα σφάλματα, και κατά συνέπεια αξίζει τον έξτρα χρόνο εκτέλεσης

Συμπερασματικά Η διαχείριση μνήμης είναι ένα σημαντικό συστατικό των αποφάσεων σχεδιασμού καθώς και των συστημάτων υλοποίησης των γλωσσών προγραμματισμού Τόσο η επίδοση όσο και η αξιοπιστία των προγραμμάτων είναι σημαντικοί παράγοντες της ανάπτυξης λογισμικού Η αυτόματη διαχείριση μνήμης είναι μια από τις πιο ενεργές περιοχές ερευνητικής δραστηριότητας και πειραματισμού στην περιοχή της υλοποίησης γλωσσών προγραμματισμού

Προτεινόμενες πηγές για περαιτέρω μελέτη