答案應該很簡單,但我想確保。是sizeof()遞歸嗎?
是sizeof()
遞歸?例如,
struct foo
{
DWORD a;
DWORD b;
};
struct bar
{
DWORD c;
foo d;
};
將一個sizeof(bar)
包括foo
大小,返回一個完整的12個字節(假定DWORD是4個字節)?
答案應該很簡單,但我想確保。是sizeof()遞歸嗎?
是sizeof()
遞歸?例如,
struct foo
{
DWORD a;
DWORD b;
};
struct bar
{
DWORD c;
foo d;
};
將一個sizeof(bar)
包括foo
大小,返回一個完整的12個字節(假定DWORD是4個字節)?
是... sizeof
給出了一個總直接包含在類型的所有成員,包括struct
/class
數據成員,非虛基類,一些實現定義的鏈接/計數器跟蹤虛擬鹼,虛擬調度表指針,填充有助於使數據成員與CPU安全或有效訪問保持一致,理論上實現可能感覺就像放在那裏一樣! (例如,用於運行時調試/錯誤檢測,垃圾收集的非標準支持......)
當然,它不包括指向或引用對象的大小,但包括這些指針和引用的大小。
+1表示*「理論上其他任何實現可能感覺就像放在那裏!」* – Nawaz
是的,sizeof運算符爲您提供包含其所有成員的結構的大小。
但是請注意,編譯器可能會添加自己的填充,所以實際大小可能/不可能等於結構成員大小的總和。
是的。 TC3:從ISO/IEC 9899摘錄
當施加到具有結構或聯合類型的操作數,其結果是字節在這樣一個對象,包括內部和後填充的總數。
(重點煤礦)
這本來是很容易嘗試了這一點爲自己,不是嗎? –
確實;然而我想,因爲谷歌沒有給出任何額外的if和s或but's(即'某些編譯器做x'等),並且沒有向前回答,我認爲這是一個很好的q/a公開如果有人想要一個快速的答案可用。我知道我可以在幾秒鐘內測試這個;) – Qix
@SimonAndréForsberg:不會。它只會告訴你,你的編譯器使它成爲12個字節。但是由於編譯器可能會插入填充,所以不能一概而論。 – MSalters