今天偶然碰到對如下兩個結構體進行sizeof()運算:
struct example1;
struct example2;
在計算機上執行後得到分別為24,16,網上查了一下,得到如下理解:
1.計算方式:sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding )
2.結構體某個成員相對於結構體首位址的偏移量可以通過巨集offsetof()來獲得,這個巨集也在stddef.h中定義,如下:
#define offsetof(s,m) (size_t)&(((s *)0)->m)
例如,想要獲得example1中l的偏移量,方法為
size_t pos = offsetof(example1, l);
3.據說為了加快計算機的取數速度,在記憶體中採取了位元組對齊的方式,關於這一點,很有點搞不懂
結構體位元組對齊
include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...
結構體位元組對齊
include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...
結構體位元組對齊
在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。從理論上講,對於任何 變數的訪問都可以從任何位址開始訪問,但是事實上不是如此,實際上訪問特定型別的變數只能在特定的位址訪問,這就需要各個變數在空間上按一定的規則排列,而不是...