mémoire informatique est généralement aligné sur une limite de taille égale à la taille du mot système . Sur un système 32 bits hypothétique , imaginez que cette taille de mot est de quatre octets. Dans le langage C , vous pouvez créer des structures qui stockent des données . Afin d'aligner à la taille de mot , le compilateur C peut ajouter le remplissage de la structure. Vous pouvez supprimer ce rembourrage en utilisant une directive de préprocesseur qui lui indique d'aligner les données différemment . Choses que vous devez
C Environnement de développement intégré , comme Eclipse CDT
compilateur C , un tel GCC
Afficher plus Instructions
1
Chargez le C IDE par cliquant sur son icône du programme. Quand il s'ouvre, sélectionnez "Fichier /Nouveau /Projet " et choisissez " Projet C " pour créer un nouveau projet C . Un fichier de code source vide apparaît dans la partie éditeur de texte de l'IDE.
2
Créer un " struct " nommé "A" avec l'alignement de mémoire par défaut . Écrire la déclaration suivante au début du fichier de code source:
struct { } A;
3
Ajouter des membres de données à la structure "A. " Par entier de mélange et types de caractères , vous vous assurez que le compilateur plots de la structure. Sur un système 32 bits , les deux premiers types de données int prennent chacun jusqu'à quatre octets de mémoire et sont parfaitement alignés tels quels. Toutefois, les deux types de données char prennent chacun un seul octet , et occupent ensemble deux octets de données . Le compilateur pad cela avec deux octets de données inutiles pour aligner correctement les données . Ajoutez les instructions suivantes à struct "A" en les plaçant entre les accolades après le mot
int un " struct . " ;
Int b;
char a ; Photos
char b ;
4
Créer une directive de préprocesseur qui lui indique d'alignement sur la limite de 1 octet , pas la limite de 4 octets :
# pragma pack ( poussoir, 1)
5
Créer une autre structure , celle-ci nommé «B», et le placer immédiatement après la directive de préprocesseur écrit à l'étape précédente .
struct { } B;
6
Remplissez struct "B" avec les mêmes types de données que struct "A", en écrivant les déclarations suivantes au sein de la accolades de struct " B. " Ces types de données seront en ligne à l'octet le plus proche, qui se trouve être de 10 ( quatre pour chaque int, un pour chaque char) . Il n'y aura pas de remplissage dans cette structure
int a; .
Int b;
char a ;
char b ;
< br > 7
réinitialiser l'alignement à son défaut par écrit la déclaration suivante:
# pragma pack (pop)