//兩個指標相減,得到的是相隔幾個元素
//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...