了解空類物件的大小
在 C 中,即使看似空的類別也具有非零大小。人們可能會認為它是 0 字節,但事實並非如此。這個問題深入探討了這種行為背後的原因。
為了說明這一點,請考慮以下程序:
#include <iostream> using namespace std; class Empty {}; int main() { Empty e; cerr << sizeof(e) << endl; return 0; }
如果編譯此程序,則各種編譯器(例如 Visual C和 Cygwin-g )始終為 1 位元組。這可能看起來出乎意料,因為該物件不包含資料成員。
為什麼是 1 個位元組?
編譯器將 1 位元組的大小分配給空類別物件以確保不同的物件有唯一的位址。這種區別對於正確的記憶體管理和避免別名問題至關重要。
為什麼不是 4 位元組(機器字)?
人們可能期望物件的大小能夠對齊與機器字大小(32 或 64 位元)有關,但事實並非如此。對齊問題對於空類別來說變得無關緊要,因為沒有要對齊的資料成員。因此,編譯器透過分配最小可行大小來最佳化空間:1 位元組。
非零大小調整
0 位元組的大小意味著兩個物件空類別可能佔用相同的記憶體位置,因此無法區分它們。這種歧義可能會導致程式中出現未定義的行為。因此,非零大小(在本例中為 1 位元組)可確保唯一位址並保持程式完整性。
以上是為什麼 C 中的空類別的大小為 1 字節,而不是 0 位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!