結構體大小及其資料的對其原則

2021-06-06 10:10:52 字數 633 閱讀 4776

結構體預設的位元組對齊一般滿足三個準則:

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;

2) 結構體每個成員相對於結構體首位址的偏移量(

offset

)都是成員自身大小的整數倍,如有需要編譯器會在成員之間加上填充位元組(

internal adding

);3) 

結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組(

trailing padding)。

例項**

#include

#include

typedef struct s1s1;

typedef struct s2s2;

int main()

列印結果如下:

對於s2,檢視其資料成員的起始位址發現

char型別的變數a占用1個位元組,double型別的變數b的起始位址與a的起始位址的偏移量為8,滿足對其原則(2),int型別的變數c的起始位址與b的相比,偏移量為8滿足原則(2)。對於整個結構體的大小(24)滿足原則(3);

結構體在記憶體中的對其原則

乙個結構體定義完了之後,其在記憶體中的儲存並不等於所有元素寬度之和。基本資料型別結構體遵循 原則一 結構體中的元素是按照定義的順序乙個個放到記憶體中去的,並不緊密排布。從記憶體儲存單元的首位址 0 開始,每乙個元素都認為記憶體根據它的大小來劃分,所以每乙個元素存放的位置從自己寬度的整數倍開始。原則二...

結構體在記憶體中的對其規則

乙個結構體變數定義完之後,其在記憶體中的儲存並不等於其所包含元素的寬度之和。例一 include using namespace std struct x s1 voidmain 比如例一中的結構體變數s1定義之後,經測試,會發現sizeof s1 16,其值不等於sizeof s1.a 1 siz...

結構體的對其規則以及為什麼要對其

1.第乙個成員在與結構體變數偏移量為0的位址處。2.其他成員變數要對齊到某個數字 對齊數 的整數倍的位址處。對齊數 編譯器預設的乙個對齊數 與 該成員大小的較小值。vs中預設的值為8 3.結構體總大小為最大對齊數 每個成員變數都有乙個對齊數 的整數倍。4.如果巢狀了結構體的情況,巢狀的結構體對齊到自...