關於記憶體對齊

2021-06-29 03:02:25 字數 695 閱讀 9168

關於資料記憶體對齊,網上有很多資料。以前我漏掉了一部分,現在我記錄一下:

結構體中偏移:

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...