Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Προγραμματισμός C / C++

Γιατί οι μεταγλωττιστές απαιτούν περισσότερη μνήμη;

Οι μεταγλωττιστές απαιτούν περισσότερη μνήμη από πολλά άλλα προγράμματα για διάφορους λόγους:

* Μεγάλες ενδιάμεσες αναπαραστάσεις (IR): Οι μεταγλωττιστές συχνά δημιουργούν μεγάλες ενδιάμεσες αναπαραστάσεις του πηγαίου κώδικα. Αυτό το IR δεν είναι απλώς μια απλή μετάφραση. Συχνά περιέχει λεπτομερείς πληροφορίες σχετικά με τη δομή, τη ροή δεδομένων του προγράμματος, τη ροή ελέγχου και τις πιθανές βελτιστοποιήσεις. Το μέγεθος αυτού του IR μπορεί να είναι σημαντικά μεγαλύτερο από τον αρχικό πηγαίο κώδικα, ειδικά για σύνθετα προγράμματα.

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

* Βελτιστοποίηση περνά: Οι σύγχρονοι μεταγλωττιστές εκτελούν πολλά περάσματα βελτιστοποίησης για να βελτιώσουν την απόδοση και την αποτελεσματικότητα του παραγόμενου κώδικα. Κάθε δελτίο μπορεί να περιλαμβάνει την ανάλυση του IR, τη μετατροπή του και ενδεχομένως τη δημιουργία ακόμη μεγαλύτερων προσωρινών δομών δεδομένων. Αυτές οι βελτιστοποιήσεις είναι έντασης μνήμης, ειδικά για βελτιστοποίηση ολόκληρου του προγράμματος όπου ο μεταγλωττιστής θεωρεί ταυτόχρονα τη δομή ολόκληρου του προγράμματος.

* Πολλαπλές αναπαραστάσεις προγράμματος: Οι μεταγλωττιστές συχνά συνεργάζονται με διάφορες αναπαραστάσεις του προγράμματος ταυτόχρονα (π.χ. πηγαίος κώδικας, αφηρημένο δέντρο σύνταξης, ενδιάμεση αναπαράσταση, κωδικός συναρμολόγησης). Η κατοχή όλων αυτών των αναπαραστάσεων στη μνήμη απαιτεί αμέσως σημαντικό χώρο.

* μεγάλα αρχεία εισόδου: Οι μεταγλωττιστές ενδέχεται να χρειαστεί να επεξεργαστούν πολύ μεγάλα αρχεία πηγαίου κώδικα, απαιτώντας από τη μνήμη να κρατήσει ολόκληρο το αρχείο ή σημαντικά τμήματα του. Αυτό ισχύει ιδιαίτερα για μεγάλα έργα λογισμικού.

* Συμπλέτες αλγόριθμοι: Πολλοί αλγόριθμοι μεταγλωττιστή είναι εγγενώς πολύπλοκες και απαιτούν σημαντική μνήμη για να λειτουργούν αποτελεσματικά. Για παράδειγμα, οι αλγόριθμοι για ανάλυση ροής δεδομένων, κατανομή καταχωρητή και ο προγραμματισμός κώδικα μπορεί να είναι ένταση μνήμης.

* Πληροφορίες εντοπισμού σφαλμάτων: Οι μεταγλωττιστές συχνά δημιουργούν πληροφορίες εντοπισμού σφαλμάτων που είναι ενσωματωμένες στα αρχεία εξόδου ή αρχεία αντικειμένων. Αυτές οι πληροφορίες βοηθούν τους εντοπιστές σφαλμάτων να συσχετίσουν τη συμπεριφορά του χρόνου εκτέλεσης πίσω στον αρχικό πηγαίο κώδικα και μπορούν να αυξήσουν σημαντικά τις απαιτήσεις μνήμης κατά τη διάρκεια της συλλογής.

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα