了解 C 中的類別大小確定
在編譯時確定 C 類的大小需要了解資料對齊原則。類別中的每個成員都有大小和對齊要求。
大小和對齊計算過程
在編譯期間,編譯器將運行大小(S) 初始化為零,並對齊要求(A) 到1(位元組)。對於班級中的每個成員:
處理完所有成員後,班級的最終規模就確定了。它是將 S 的值調整為整個類別 (A) 對齊要求的倍數。
對齊注意事項
範例
提供的程式碼示範了此流程:
<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,儘管與TestClass1 和TestClass2 具有相同的成員,但由於__m128i 的對齊要求(強制使用16 位元組邊界)而更大(48 位元組)。 TestClass4 具有不同的資料成員排序,具有不同的對齊方式和大小(32 位元組)。
以上是資料對齊如何影響 C 類的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!