結構體大小
在計算結構體大小時,有幾點需要注意:
1.char可存放在任意位址,short存放在能被2整除的位址,int存放在能被4整除的位址…即資料型別存放的位址要能被其資料型別所佔位元組數整除。(可先將每個成員的位元組數寫出,然後從第二個成員開始,將前面成員的總位元組數補齊成當前位元組數的倍數。)
2.結構體的總大小,一定要能整除單個成員最大型別的大小。
struct a
;//所佔位元組數為8
struct b
;//所佔位元組數為24
struct c
d;//8
};//所佔位元組數為12
(總大小一定要能整除單個成員最大型別的大小,單個成員最大型別為int/float,位元組數為4,故結構體總大小為12而不是16)
struct x
;//沒有定義變數,不占用記憶體
};struct d
;};//12
記憶體對齊:各種資料存放的位址要能夠整除該資料本身的位元組數
在上方的儲存方式中,aa[1]的存放首位址無法整除4,此時需要記憶體對齊,即下方的儲存方式,char型只佔乙個位元組,後面空出三個不使用的空位,將後面的資料儲存在前八個位元組後,防止在不同的平台中資料發生錯亂。
在編寫程式時,我們可以
char a;//1+3
//char tmp[3];//定義變數將未使用的空間佔滿,保留不用
int b;//4
};
結構體的大小 記憶體對齊
includeusing namespace std struct t1 結果為8的倍數,因為最大成員型別double佔8位元組 16 struct t2 結果為2的倍數,因為最大成員型別short佔2位元組 4 struct t3 結果為8的倍數,因為最大成員型別double佔8位元組 16 st...
結構體的大小與記憶體對齊
結構體的大小不是結構體元素單純相加就行的,因為我們現在主流的計算機使用的都是32bit 字長的cpu,對這型別的cpu取4個 位元組的數要比取乙個位元組要高效,也更方便。所以在結構體中每個成員的首位址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平台上的 編譯器都有...
結構體對齊(記憶體對齊
有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...