結構體內存對齊

2021-05-27 04:33:11 字數 526 閱讀 5833

對齊規則

每個特定平台上的編譯器都有自己的預設「對齊係數」(也叫對齊模數)。程式設計師可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一係數,其中的n就是你要指定的「對齊係數」。

規則:1、資料成員對齊規則:結構(struct)的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員的對齊按照#pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。對齊方式為:(每乙個資料成員到起始位置的偏移)/(#pragma pack指定的數值和這個資料成員自身長度中,比較小的那個)=整數

2、結構的整體對齊規則:在資料成員完成各自對齊之後,結構本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構最大資料成員長度中,比較小的那個進行。整體對齊方式:(結構體的大小)/(#pragma pack指定的數值和結構最大資料成員長度中,比較小的那個)=整數

3、結合1、2顆推斷:當#pragma pack的n值等於或超過所有資料成員長度的時候,這個n值的大小將不產生任何效果。

結構體內存對齊

結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...

結構體內存對齊

一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...

結構體內存對齊

pragma pack 4 class testb int nsize sizeof testb 這裡nsize結果為12,在預料之中。現在去掉第乙個成員變數為如下 按照正常的填充方式nsize的結果應該是8,為什麼結果顯示nsize為6呢?pragma pack 4 class testc int...