假設我有以下枚舉某處聲明:在C++中,枚舉數據類型消耗多少內存?
enum yin_yang {
yin,
yang
};
我希望使用新的數據類型,像這樣:
yin_yang balance = yang;
如何系統內存的多少將「平衡」被佔用? 1位,1個字節或其他東西?
假設我有以下枚舉某處聲明:在C++中,枚舉數據類型消耗多少內存?
enum yin_yang {
yin,
yang
};
我希望使用新的數據類型,像這樣:
yin_yang balance = yang;
如何系統內存的多少將「平衡」被佔用? 1位,1個字節或其他東西?
無論是實際佔用內存取決於你的代碼優化做什麼,但如果你想知道一個類型或對象的字節大小,您可以使用sizeof
操作:
std::cout << sizeof(yin_yang) << std::endl;
std::cout << sizeof(balance) << std::endl;
這並不意味着balance
實際上必須在運行時佔用內存空間。它可以完全優化。但是在編譯時會知道對象的大小。
是的,雖然編譯器可以完全優化值但仍然打印它所謂的大小 –
至少在C++ 11,可以指定要用作枚舉的基礎使用整數型:
enum yin_yang : uint8_t {
yin,
yang
};
否則編譯器選擇的基本類型,這將是一個整數類型,雖然沒有指定哪個IIRC(我相信許多編譯器默認爲int
)。基本類型決定了枚舉實例的存儲需求。
編譯器可以自由選擇不大於'int'的任何類型。 – legends2k
您可以使用一元運算符'sizeof'來計算以字節大小單位數量度量的任何變量或數據類型的大小。
對於範圍的枚舉,從C++ 14中摘錄的相關部分,[decl.enum]:
對於枚舉其基礎類型是不固定的,基本類型是整數類型可以表示枚舉中定義的所有枚舉值。如果沒有整型可以表示所有的枚舉值,則枚舉是不合格的。它是由實現定義的,其中整數類型用作基礎類型,除非基礎類型不應大於
int
,除非枚舉器的值不適合int
或unsigned int
。如果枚舉器列表爲空,則基礎類型就好像該枚舉具有值爲0
的單個枚舉器。
因此,如果列舉美國在int
那麼它是保證≤sizeof(int)
,更大的如果不是有表示的。當然,如果你明確指定了底層類型,那麼你就知道它的大小。
[無論包含多少元素,枚舉的大小都是恆定的可能重複](http://stackoverflow.com/questions/17888322/size-of-en-um-is-constant-no-matter-how-many -element-it-contains) –
用'cout << sizeof(yin_yang)<< endl;' – Klaus
檢出它你可以排除它只消耗一個位的可能性。 'sizeof(yin_yang)'必須至少有一個,即'char'的大小,'char'必須多於一個位。 – skyking