已知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的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...