Comprendre la taille des objets de classe vides
En C, même les classes apparemment vides ont une taille non nulle. On pourrait supposer que ce serait 0 octet, mais ce n’est pas le cas. Cette question examine les raisons de ce comportement.
Pour illustrer cela, considérons le programme suivant :
#include <iostream> using namespace std; class Empty {}; int main() { Empty e; cerr << sizeof(e) << endl; return 0; }
Si l'on compile ce programme, la sortie sur différents compilateurs (par exemple, Visual C et Cygwin-g ) est systématiquement de 1 octet. Cela peut sembler inattendu puisque l'objet ne contient aucun membre de données.
Pourquoi 1 octet ?
Le compilateur attribue une taille de 1 octet à un objet de classe vide pour garantir que différents objets ont des adresses uniques. Cette distinction est cruciale pour une bonne gestion de la mémoire et pour éviter les problèmes d'alias.
Pourquoi pas 4 octets (mot machine) ?
On pourrait s'attendre à ce que la taille de l'objet s'aligne avec la taille du mot machine (32 ou 64 bits), mais ce n'est pas le cas. Les problèmes d'alignement ne sont plus pertinents pour les classes vides car il n'y a pas de données membres à aligner. Par conséquent, le compilateur optimise l'espace en attribuant la taille minimale réalisable : 1 octet.
Justification de taille non nulle
Une taille de 0 octet impliquerait que deux objets de une classe vide pourrait occuper le même emplacement mémoire, rendant impossible leur distinction. Cette ambiguïté pourrait conduire à un comportement indéfini dans le programme. Par conséquent, une taille non nulle (dans ce cas, 1 octet) garantit des adresses uniques et maintient l'intégrité du programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!