首頁 > 後端開發 > C++ > 為什麼 C 中的空類別的大小為 1 字節,而不是 0 位元組?

為什麼 C 中的空類別的大小為 1 字節,而不是 0 位元組?

Barbara Streisand
發布: 2024-12-14 19:12:12
原創
200 人瀏覽過

Why Do Empty Classes in C   Have a Size of 1 Byte, Not 0 Bytes?

了解空類物件的大小

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板