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

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

Πώς να αφαιρέσει Επένδυση Από Δομή C

Υπολογιστής μνήμη είναι συνήθως ευθυγραμμίζεται με το όριο ίση σε μέγεθος με το μέγεθος της λέξης συστήματος . Σε ένα υποθετικό σύστημα 32 - bit , φανταστείτε ότι αυτό το μέγεθος της λέξης είναι τέσσερα bytes. Στη γλώσσα C , μπορείτε να δημιουργήσετε δομές που αποθηκεύουν τα δεδομένα . Προκειμένου να ευθυγραμμιστούν με το μέγεθος της λέξης , ο compiler C μπορεί να προσθέσει padding στη δομή . Μπορείτε να καταργήσετε αυτό το παραγέμισμα με τη χρήση ενός οδηγία προεπεξεργαστή που λέει να εναρμονίσει τα στοιχεία με διαφορετικό τρόπο . Τα πράγματα που θα χρειαστείτε
C ολοκληρωμένο περιβάλλον ανάπτυξης , όπως Eclipse CDT
C Compiler , μια τέτοια GCC
Η Εμφάνιση Περισσότερες οδηγίες
Η

1 Τοποθετήστε το C IDE από κλικ στο εικονίδιο του προγράμματος του . Όταν ανοίγει , επιλέξτε " File /New /Project" και επιλέξτε " C Project" για να δημιουργήσετε ένα νέο έργο C . Ένα κενό αρχείο πηγαίου κώδικα εμφανίζεται στο τμήμα επεξεργασίας κειμένου του IDE . 2

Δημιουργήστε μια " struct " που ονομάζεται "A" με την ευθυγράμμιση προεπιλεγμένη μνήμη . Γράψτε την ακόλουθη δήλωση στην κορυφή του αρχείου πηγαίου κώδικα :

struct { } Α ?
Εικόνων 3

Προσθέστε κάποια μέλη δεδομένων στο struct " Α. " Με τη μίξη και ακέραιος χαρακτήρας είδη , σας εξασφαλίζει ότι ο compiler μαξιλάρια τη δομή . Σε ένα σύστημα 32 - bit , οι δύο πρώτοι τύποι δεδομένων int κάθε λάβουν έως και τέσσερα byte της μνήμης και εναρμονίζονται απόλυτα όπως είναι . Ωστόσο, τα δύο χαρακτηριστικά τύπους δεδομένων κάθε λάβουν ένα μόνο byte , και μαζί καταλαμβάνουν δύο bytes δεδομένων . Ο compiler βούληση pad αυτό με δύο bytes των δεδομένων σκουπίδια να ευθυγραμμιστούν σωστά τα δεδομένα . Προσθέστε τις ακόλουθες δηλώσεις προς struct " A " με την τοποθέτηση τους ανάμεσα στις αγκύλες μετά τη λέξη

int ένα " struct ". ?

Int b ?

Char a ?

char b ?
Η 4

Δημιουργήστε μια οδηγία προεπεξεργαστή που λέει να ευθυγραμμιστεί με το όριο 1 - byte , δεν είναι το όριο 4 - byte :

# pragma πακέτο (push , 1 )
5

Δημιουργήστε μια άλλη struct , αυτό που ονομάζεται " B " και τοποθετήστε το αμέσως μετά η οδηγία προεπεξεργαστή γραμμένο στο προηγούμενο βήμα .

struct { } Β ?
Η 6

Συμπληρώστε struct "Β" με τους ίδιους τύπους δεδομένων struct " A", γράφοντας τις ακόλουθες δηλώσεις μέσα στις αγκύλες του struct " Β. " Αυτοί οι τύποι δεδομένων που θα παρατάξει στο πλησιέστερο byte , η οποία συμβαίνει να είναι 10 ( τέσσερα για κάθε int , ένα για κάθε char ) . Δεν θα υπάρξει padding σε αυτή τη δομή

int a ? .

Int b ?

Char a ?

Char b ?

7

Επαναφορά την ευθυγράμμιση πίσω στην προεπιλογή του , γράφοντας την ακόλουθη δήλωση :

pack # pragma ( pop )
Η
εικόνων

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

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