結構體的大小 記憶體對齊

2021-09-23 14:15:21 字數 535 閱讀 5639

#includeusing namespace std;

struct t1 //結果為8的倍數,因為最大成員型別double佔8位元組

; //16

struct t2 //結果為2的倍數,因為最大成員型別short佔2位元組

; //4

struct t3 //結果為8的倍數,因為最大成員型別double佔8位元組

; //16

struct s1 //結果為8的倍數,因為最大成員型別double佔8位元組

; //4

double l; //8

char e; //1, 增加7個位元組的空白

}; //24

struct s2 //結果為8的倍數,因為最大成員型別double佔8位元組

; //8

int l; //4

char e; //1, 增加3個位元組的空白

int k; //4 增加4個空白

}; //32

int main()

結構體大小及記憶體對齊

結構體大小 在計算結構體大小時,有幾點需要注意 1.char可存放在任意位址,short存放在能被2整除的位址,int存放在能被4整除的位址 即資料型別存放的位址要能被其資料型別所佔位元組數整除。可先將每個成員的位元組數寫出,然後從第二個成員開始,將前面成員的總位元組數補齊成當前位元組數的倍數。2....

結構體的大小與記憶體對齊

結構體的大小不是結構體元素單純相加就行的,因為我們現在主流的計算機使用的都是32bit 字長的cpu,對這型別的cpu取4個 位元組的數要比取乙個位元組要高效,也更方便。所以在結構體中每個成員的首位址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平台上的 編譯器都有...

結構體內存對齊 計算結構體的大小

在求結構體的大小時,絕大部分情況下不會直接等於各個成員大小的總和,編譯器為了優化對結構體成員的訪問總會在結構體中插入一些空白位元組 記憶體對齊 例如 struct s1 printf d n sizeof s1 struct s3 printf d n sizeof s3 結構體s1和s3的大小並不...