計算型別大小的巨集

2021-08-01 08:40:16 字數 637 閱讀 8214

//兩個指標相減,得到的是相隔幾個元素

//char* 相隔幾個元素,就是相隔幾個位元組

#define sizeof_v(x) (char*)(&x+1) - (char*)(&x)

#define sizeof_t(t) ((size_t)((t*)0 + 1))

//對齊,記憶體池中,記憶體塊大小是規則的。產生空隙碎片

#define align(v,b) ((v+b-1) & ~(b-1))

class empty ;

int main(void ) {

empty e;

int n;

cout << sizeof_v(e) << endl;

cout << sizeof_v(n) << endl;

cout << sizeof_t(empty) << endl;

cout << sizeof_t(int) << endl;

cout << align(0, 16) <

union和struct型別的大小計算

對齊就是要滿足儲存變數的起始位址與對齊大小餘數為0。對於union,分兩步 先算union對齊大小,對齊的大小是取決於union成員中位元組對齊最大的那個 再算union實際分配的空間,而分配給union的實際大小不僅要滿足是對齊大小的整數倍,同時要滿足實際大小不能小於最大成員的大小。如 union...

union和struct型別的大小計算

union 和struct 型別的大小計算 對於 union 對齊的大小是最大的基本元素的對齊大小,物件的大小必須是該基本元素大小的整數倍。如 union u1 對齊為 4位元組對齊,大小為大於 9並且為 4的倍數,為12。若其中的 int b 改為double 則對齊為 8,大小為16。複雜一點的...

struct 結構體型別的大小計算

struct s1 問sizeof s1 等於多少?聰明的你開始思考了,char佔1個位元組,int佔4個位元組,那麼加起來就應該是5。是這樣嗎?你在你機器上試過了嗎?也許你是對的,但很可能你是錯的!vc6中按預設設定得到的結果為8。why?為什麼受傷的總是我?請不要沮喪,我們來好好琢磨一下size...