Maison >développement back-end >C++ >Comment l'alignement des données affecte-t-il la taille des classes C ?
Comprendre la détermination de la taille d'une classe en C
Déterminer la taille d'une classe C au moment de la compilation nécessite une compréhension des principes d'alignement des données. Chaque membre d'une classe a une exigence de taille et d'alignement.
Processus de calcul de la taille et de l'alignement
Lors de la compilation, le compilateur initialise une taille courante (S) à zéro et une exigence d'alignement (A) à un (octet). Pour chaque membre de la classe :
Après avoir traité tous les membres, la taille finale de la classe est déterminée. Il s'agit de la valeur de S ajustée pour être un multiple de l'exigence d'alignement de la classe entière (A).
Considérations sur l'alignement
Exemple
Le code fourni illustre ce processus :
<code class="cpp">#include <xmmintrin.h> class TestClass1 { __m128i vect; }; // Size: 16 bytes class TestClass2 { char buf[8]; char buf2[8]; }; // Size: 16 bytes class TestClass3 { char buf[8]; __m128i vect; char buf2[8]; }; // Size: 48 bytes class TestClass4 { char buf[8]; char buf2[8]; __m128i vect; }; // Size: 32 bytes</code>
TestClass3, bien qu'il ait les mêmes membres que TestClass1 et TestClass2, est plus grand (48 octets) en raison de l'exigence d'alignement de __m128i, qui impose une limite de 16 octets. TestClass4, avec un ordre de données membre différent, a un alignement et une taille différents (32 octets).
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!