C 記憶體對齊問題(以結構體為例)

2021-10-21 14:55:47 字數 633 閱讀 4008

已知sizeof(char)=1,sizeof(short)=2,sizeof(int)=4,現在有個結構體如下:

struct size1 

;

sizeof

(size1)

=8

struct size2 

;

sizeof

(size2)

=8

環境:vc6.0,32位的win7系統

為何size1和size2的sizeof會一樣呢?

原因:結構體的sizeof涉及到記憶體對齊問題

記憶體對齊的時候整體佔的記憶體一定是最大資料元素的整數倍,比如說第乙個裡面最大的是整形(4位元組),那麼整體的記憶體一定是4n個位元組。但不一定是4元素個數。

下面看一下第乙個size:a佔4個位元組,沒什麼問題,然後接下來4個位元組先放上乙個char,還剩3個位元組,能放下short,所以char和short公用乙個四位元組塊,雖然尾部的乙個位元組沒有用。

第二個size:a佔4個位元組,然後接下來4個位元組放兩個char和乙個short剛剛好。

所以size1和size2的sizeof在同一編譯環境下是一樣的。

C語言結構體對齊 記憶體對齊問題

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...

解析C語言結構體對齊 記憶體對齊問題

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...

解析C語言結構體對齊 記憶體對齊問題

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...