C 類別在編譯期間以特定規則決定的方式佔用記憶體。類別的大小是根據其包含的資料成員及其各自的對齊方式計算的。
編譯器分析類別時,它會依序評估每個資料成員:
處理完所有資料成員後,編譯器會將類別大小調整為常見對齊要求的倍數。
在提供的範例中:
兩者都有相似的資料成員(兩個大小為8 的字元陣列),導致大小為16個位元組。
它包含與 TestClass1 和 TestClass2 相同的資料成員,但 __m128i 資料成員需要 16 位元組對齊。此對齊方式會覆寫 char 陣列的對齊方式,導致類別大小為 48 個位元組(16 個位元組用於對齊,然後 16 個位元組用於 __m128i,然後 16 個位元組用於更多對齊)。
該類別具有與 TestClass3 相同的資料成員,但順序不同。但是,對齊規則保持不變,導致類別大小為 32 位元組(第一個字元陣列為 8 位元組,對齊為 16 位元組,__m128i 為 16 位元組,第二個字元陣列為 8 位元組)。
這些規則確保有效的記憶體分配和對齊,以優化資料存取和效能。
以上是C 編譯器如何根據資料成員和對齊方式決定類別的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!