Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Compréhension de l’Agencement Mémoire des Structs | Compréhension des Structs et de la Mémoire
Maîtriser les Structs en C

bookCompréhension de l’Agencement Mémoire des Structs

Les structures mémoire dans le langage de programmation C jouent un rôle clé dans la compréhension de la manière dont les données sont stockées et accédées en mémoire. Lorsqu'une structure est définie en C, le compilateur détermine comment placer ses membres en mémoire selon les règles d'alignement et de remplissage.

Voici un aperçu du fonctionnement de l'allocation mémoire de base pour les structures en C :

main.c

main.c

copy
123456789101112131415
#include <stdio.h> // simple struct struct Test { char x; // 1 byte int y; // 4 bytes }; int main() { struct Test example; printf("Size of struct Test: %zu\n", sizeof(example)); printf("Address of example.x (char): %p\n", &example.x); printf("Address of example.y (int): %p\n", &example.y); return 0; }

Comme prévu, une telle structure devrait occuper 5 octets : 1 octet pour char x, 4 octets pour int y, mais elle occupera en réalité 8 octets.

Pourquoi la taille de la structure est-elle bien plus grande que prévu ?

Cela se produit parce que le compilateur peut insérer des octets de bourrage entre les membres afin de garantir que chaque membre commence à une adresse qui est un multiple de sa taille.

Sur l'image, vous pouvez voir que la première partie de la mémoire (section plus claire) appartient à la variable char x, qui occupe seulement un octet. Ensuite, il y a trois octets vides — il s'agit du bourrage, ajouté automatiquement par le compilateur pour garantir que l'élément suivant commence à la bonne adresse. Après le bourrage, la variable int y est stockée, occupant quatre octets.

En conséquence, la structure occupe un total de huit octets : un pour le char, trois pour l'alignement, et quatre pour l'int.

Cette disposition existe pour aider le processeur à accéder aux données plus efficacement. Sans alignement, l'accès aux membres de la structure serait plus lent et le programme s'exécuterait moins rapidement.

question mark

Pourquoi sizeof(struct Test) retourne-t-il 8 au lieu de 5 ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

bookCompréhension de l’Agencement Mémoire des Structs

Glissez pour afficher le menu

Les structures mémoire dans le langage de programmation C jouent un rôle clé dans la compréhension de la manière dont les données sont stockées et accédées en mémoire. Lorsqu'une structure est définie en C, le compilateur détermine comment placer ses membres en mémoire selon les règles d'alignement et de remplissage.

Voici un aperçu du fonctionnement de l'allocation mémoire de base pour les structures en C :

main.c

main.c

copy
123456789101112131415
#include <stdio.h> // simple struct struct Test { char x; // 1 byte int y; // 4 bytes }; int main() { struct Test example; printf("Size of struct Test: %zu\n", sizeof(example)); printf("Address of example.x (char): %p\n", &example.x); printf("Address of example.y (int): %p\n", &example.y); return 0; }

Comme prévu, une telle structure devrait occuper 5 octets : 1 octet pour char x, 4 octets pour int y, mais elle occupera en réalité 8 octets.

Pourquoi la taille de la structure est-elle bien plus grande que prévu ?

Cela se produit parce que le compilateur peut insérer des octets de bourrage entre les membres afin de garantir que chaque membre commence à une adresse qui est un multiple de sa taille.

Sur l'image, vous pouvez voir que la première partie de la mémoire (section plus claire) appartient à la variable char x, qui occupe seulement un octet. Ensuite, il y a trois octets vides — il s'agit du bourrage, ajouté automatiquement par le compilateur pour garantir que l'élément suivant commence à la bonne adresse. Après le bourrage, la variable int y est stockée, occupant quatre octets.

En conséquence, la structure occupe un total de huit octets : un pour le char, trois pour l'alignement, et quatre pour l'int.

Cette disposition existe pour aider le processeur à accéder aux données plus efficacement. Sans alignement, l'accès aux membres de la structure serait plus lent et le programme s'exécuterait moins rapidement.

question mark

Pourquoi sizeof(struct Test) retourne-t-il 8 au lieu de 5 ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1
some-alt