結構體的儲存分配問題

2021-08-13 09:40:57 字數 637 閱讀 7281

struct align

;

那麼這樣的結構將會花費12個位元組(因為int 型別是占用了個位元組的,char型別占用個位元組,所以邊界對齊原則,需要12個位元組)

但是我們實際用的是個位元組的大小,這樣的話我們的儲存利用率是比較低的.

所以我們的改進方法就是調整結構宣告的順序就可以了,讓那些對邊界要求最嚴格的成員首次出現對邊界要求最弱的成員最後出現.這種方式能夠最大限度的減少因邊界對齊而帶來的空間損失.

sizeof操作符能夠得出乙個結構的整體長度,包括因邊界對齊而跳過的那些位元組.

如果需要確定某個成員的實際位置,應該考慮邊界對齊因素,可以使用offsetof巨集(定義於stddef.h

offsetof( type, member )
type 是結構的型別,member 是你需要的那個成員名.表示式的結果就是乙個size_t值,表示這個指定成員開始儲存的位置距離結構開始儲存的位置偏移幾個位元組.

C C 結構體的儲存分配

結構體的大小怎麼計算,在乙個整型佔4個位元組,字元型佔1個位元組的機器裡,乙個包含乙個整型 兩個字元型的結構體型別佔的空間有多大?4 2 1 6?看看下面這段 你知道它的列印結果 整型4個位元組,字元1個位元組 結果會是6 6 6 8嗎?讓我們來看一下結果吧 你對了多少個?第乙個和第四個相信不會有人...

關於結構體的儲存分配

先看乙個例子 struct my t struct my t2 int tmain int argc,tchar argv 結果為 1245020 1245021 1245016 1244996 1245004 1245000 1244980 1244981 1244984812 83個結構體中的成...

簡析結構體儲存分配

結構與陣列類似,但是兩者之間存在著很大的差別。陣列是通過下標進行訪問,而結構是通過其成員的名字進行訪問的。其次結構體內部成員更加靈活,那麼結構體在記憶體中的儲存是怎麼分配的?來看下面 include struct s1 struct s2 int main 程式執行結果為 關於這段 中的結構體內存分...