Die Bestimmung der Klassengröße in C verstehen
Die Bestimmung der Größe einer C-Klasse zur Kompilierungszeit erfordert ein Verständnis der Prinzipien der Datenausrichtung. Für jedes Mitglied innerhalb einer Klasse gelten Größen- und Ausrichtungsanforderungen.
Prozess zur Größen- und Ausrichtungsberechnung
Während der Kompilierung initialisiert der Compiler eine laufende Größe (S) auf Null und eine Ausrichtungsanforderung (A) auf eins (Byte). Für jedes Mitglied in der Klasse:
Nach der Verarbeitung aller Mitglieder wird die endgültige Größe der Klasse ermittelt. Es handelt sich um den Wert von S, der so angepasst wird, dass er ein Vielfaches der Ausrichtungsanforderung der gesamten Klasse (A) ist.
Ausrichtungsüberlegungen
Beispiel
Der bereitgestellte Code veranschaulicht diesen Prozess:
<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 ist trotz der gleichen Mitglieder wie TestClass1 und TestClass2 aufgrund der Ausrichtungsanforderung von __m128i, die eine 16-Byte-Grenze erzwingt, größer (48 Bytes). TestClass4 hat mit einer anderen Reihenfolge der Datenelemente eine andere Ausrichtung und Größe (32 Bytes).
Das obige ist der detaillierte Inhalt vonWie wirkt sich die Datenausrichtung auf die Größe von C-Klassen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!