2012-12-30 37 views
1

可能重複:
C++: What is the size of an object of an empty class?沒有數據的類的對象是否佔用內存?

我有沒有數據的類如以下

class A {}; 

我用它來定義一個對象

A a; 

我認爲對象「a」有一個地址,對吧?它佔用一些內存嗎?如果是這樣,它佔用了多少字節?

如果對象「a」的類型爲void,會發生什麼情況。非常感謝!

+3

參見此信息: [C-什麼-是最尺寸的-AN-對象的-AN-空級(http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-object-of-an-empty-class) –

回答

4

我覺得對象「a」有一個地址,對吧?它佔用一些內存嗎?如果是這樣,它佔用了多少字節?

IIRC的標準規定,每一個對象都有一個地址和一個對象(如sizeof返回)的最小尺寸爲1。話雖這麼說,可能是優化將使該變量消失(也許除非你明確請求它的地址)。

除非它是位域(9.6),否則大多數派生對象的大小應爲非零,並佔用一個或多個字節的存儲空間。基類子對象的大小可能爲零。 [...]

除非對象是零大小的位域或基類子對象,否則該對象的地址就是它佔據的第一個字節的地址。兩個不同的對象既不是比特字段也不是零大小的基類子對象應具有不同的地址。

注4:在「作爲假設」規則的實現,則允許存儲兩個對象在相同的機器地址或在所有如果該程序不能觀察的差(1.9)不存儲一個 對象。

(C++ 11§1.8¶5-6)


如果對象會發生什麼 「一」 與類型空隙。

void不能用於聲明變量,因爲它是「不完整的類型」。

void類型有一組空的值。 void類型是不完整的不完整類型。

(C++ 11§3.9.1¶9)

3

理論上,它根本不需要佔用任何內存。它可以一起優化。

雖然sizeof一個類不能爲0,如果這就是你的意思。如果你打印出sizeof(a),你會(大部分時間)得到1(不管它是什麼,它是一個非零值)。

此外,您不能有void類型的對象,所以最後一個問題沒有意義。

相關問題