Table of Contents
Η κατανόηση του τρόπου αποθήκευσης των δεδομένων στη μνήμη είναι απαραίτητη για τον αποτελεσματικό προγραμματισμό σε C και C++. Οι δομές και τα συνδικάτα είναι θεμελιώδεις τύποι δεδομένων που επηρεάζουν τη διάταξη και το μέγεθος της μνήμης. Αυτό το άρθρο εξηγεί πώς η μνήμη κατανέμεται για αυτούς τους τύπους δεδομένων και πώς να υπολογίσουν με ακρίβεια τα μεγέθη τους.
Διάταξη μνήμης των δομών
Οι δομές σε C και C++ είναι συλλογές μεταβλητών, πιθανώς διαφορετικών τύπων, ομαδοποιημένες με ένα μόνο όνομα. Ο μεταγλωττιστής κατανέμει τη μνήμη για μια δομή τοποθετώντας κάθε μέλος διαδοχικά, με πιθανή επικόλληση για να ικανοποιήσουν τις απαιτήσεις ευθυγράμμισης.
Το συνολικό μέγεθος μιας δομής είναι το άθροισμα των μεγεθών των μελών της συν κάθε προσθήκης padding για ευθυγράμμιση. Το padding εξασφαλίζει ότι κάθε μέλος ξεκινά σε μια διεύθυνση που διαιρείται από το μέγεθος ή την απαίτηση ευθυγράμμισης.
Διάταξη μνήμης των Ενώσεων
Όλα τα μέλη μιας ένωσης μοιράζονται τον ίδιο χώρο μνήμης, ο οποίος είναι ίσος με το μέγεθος του μεγαλύτερου μέλους της. Αυτό επιτρέπει σε πολλούς τύπους δεδομένων να καταλαμβάνουν την ίδια θέση μνήμης.
Το μέγεθος μιας ένωσης καθορίζεται από το μεγαλύτερο μέλος της, συν πιθανή padding για ευθυγράμμιση. Η γραφή σε ένα μέλος επηρεάζει τα δεδομένα των άλλων μελών, έτσι ώστε τα συνδικάτα χρησιμοποιούνται για την αποδοτική από μνήμης ανταλλαγή δεδομένων.
Υπολογισμός μεγεθών δεδομένων
Ο υπολογισμός του μεγέθους των δομών και των συνδικάτων περιλαμβάνει το σμίξιμο των μεγεθών των μεμονωμένων μελών και την εξέταση του padding για ευθυγράμμιση. Ο [[LFT:0]]sizeof[[LFT:1]] φορέας εκμετάλλευσης σε C και C++ παρέχει το συνολικό μέγεθος σε bytes.
Για παράδειγμα, εξετάστε μια δομή με ] και ένα . Το μέγεθος της δομής εξαρτάται από το μέγεθος , το μέγεθος ], και το πώμα που προστίθεται για ευθυγράμμιση. Ομοίως, το μέγεθος μιας ένωσης είναι το μέγεθος του μεγαλύτερου μέλους της.
- Χρήση μέγεθος του για τον προσδιορισμό του συνολικού μεγέθους.
- Εξετάστε τις απαιτήσεις ευθυγράμμισης για κάθε μέλος.
- Λογαριασμός για padding που προστίθεται από τον μεταγλωττιστή.
- Να θυμάστε ότι τα συνδικάτα μοιράζονται τη μνήμη μεταξύ όλων των μελών.