關於資料記憶體對齊,網上有很多資料。以前我漏掉了一部分,現在我記錄一下:
結構體中偏移:
struct test
int a;
short b;
char sz[2];
struct test2
short b;
int a;
char sz[2];
sizeof(test1) = 8, sizeof(test2)=12;
預設情況下test對齊的力度為4個位元組,為了方便cpu取指令,開始分析
test1
int a變數大小為4個位元組,則它的對齊粒度為4,偏移+0
short b大小為2個位元組,則它的對齊粒度為2,偏移+4
char sz為1個位元組,對齊粒度為1偏移 + 6
test2;
short b變數大小為2個位元組,則它的對齊粒度為2,偏移+0
int a變數大小為4個位元組,則她的對齊粒度為4, 偏移+4(這裡為什麼為4了,因為你的對齊粒度為4個位元組,位址要能夠被4整除,所以前面填充2個位元組)
char sz為1個位元組,對齊粒度為1偏移+8
但是為什麼為12了,因為你算完偏移位址後,如果大小不能夠被對齊粒度整除,怎麼填充能夠被整除。(使得位址能夠被記憶體對齊粒度整除,這裡為10,所以要加上2)
總結:關於記憶體對齊,我們記住一點,取記憶體大小和記憶體對齊粒度最小值。
關於記憶體對齊
資料傳送到網路板的資料報大小根本不是實際控制數 據包的大小 這時我才想起乙個人,stanley b.lippman,他寫的那 一本書 inside object modale 曾經提過這樣的事 情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上...
關於記憶體對齊
早上看了乙個貼的面試題,struct st int i short s char c sizeof struct st 是多少?int 4,short 2,char 1,但是sizeof st 是8。這個就是記憶體對齊 再來看個例子 struct strt1 strt1 s1 假設s1.c1位址為0...
關於記憶體對齊
資料傳送到網路板的資料報大小根本不是實際控制資料報的大小 這時我才想起乙個人,stanley b.lippman,他寫的那一本書 inside object modale 曾經提過這樣的事情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上對 s...