C語言 結構對齊

2021-07-24 03:31:05 字數 661 閱讀 7928

位元組對齊一直困擾著我,具體為什麼需要位元組對齊也不是特別清楚,貌似是因為什麼cpu的讀取相關的問題導致的。

我最近研究了一下,發現乙個非常簡單的對齊計算方式。

假設其實位址是0,那麼以後的每個變數的開始位址必須是其自身的長度的整數倍,還有,為了保證結構體中套用結構體的方式,所以結構體本身的長度需要是其最長元素的整數倍。

struct a

short a;

int b;

short c;

double d;

char e;

a::a 占用2個位元組,總位元組數為2

a::b 占用4個位元組,總位元組數不夠4的整數倍,需要補齊2個位元組,總位元組數為4+4=8

a::c 占用2個位元組,總位元組數為10

a::d 占用8個位元組,總位元組數不夠8的整數倍,需要補齊6個位元組,總位元組數為16+8=24

a::e占用1個位元組,總位元組數為25

a中最長的變數位元組數為8,總位元組數不夠8的整數倍,需要補齊7個位元組,總位元組數為32

struct b

struct a a;

char b;

b::a 占用32個位元組,總位元組數為32

b::b 占用1個位元組,總位元組數為33

b中最長的變數位元組數為8,總位元組數不夠8的整數倍,需要補齊7個位元組,總位元組數為40

c語言 結構體對齊

1 編譯器是按照什麼樣的原則進行對齊的?a.資料型別自身的對齊值 對於char型資料,其自身對齊值為1,對於short型為2,對於int,float,double型別,其自身對齊值為4,單位位元組。b.結構體或者類的自身對齊值 其成員中自身對齊值最大的那個值。c.指定對齊值 pragma pack ...

C語言結構體對齊

解析c語言結構體對齊 記憶體對齊問題 c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?開始學的時候,也被此類問題困擾...

c語言結構體對齊

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。結構體到底怎樣對齊?下面總結了對齊原則,在沒有 pragma pack巨集的情況下 原則1 普通資料成員對齊規則 第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始 比如int在32位機為 ...