這裡我們先來看一道題
這是牛客網上的乙個題,我在計算這個類的大小時,對於enum列舉型別所佔空間的大小有了一些困惑,通過查閱資料我了解到其實在c++標準文件中是這樣說明的:「列舉型別的尺寸是以能夠容納最大枚舉子的值的整數的尺寸」,同時標準中也說名了:「列舉型別中的枚舉子的值必須要能夠用乙個int型別表述」,也就是說,列舉型別的尺寸不能夠超過int型別的尺寸,但是是不是必須和int型別具有相同的尺寸呢?上面的標準已經說得很清楚了,只要能夠容納最大的枚舉子的值的整數就可以了。
所以其實可以說乙個列舉型別所佔空間的大小即為乙個常數所佔記憶體空間的大小,即乙個int型所佔記憶體空間的大小
這裡我在vs2013裡計算了一下乙個列舉型別的大小
了解了列舉型別大小之後,我們再來分析一下這道題,我們知道在計算類的大小時也需要考慮記憶體對齊的問題,(記憶體對齊問題可參考博文 )
參考博文
enum的記憶體大小
enum在記憶體中占用多少儲存空間,為什麼在使用enum型別的時候不用寫上enum的名字呢,想struct一樣呼叫?在網上搜尋了一下,找到了想要的結論!enum定義類似與下面這樣 enum color 用起來可能像這樣 color color red switch color 先說為什麼red,不能...
空型別所佔記憶體大小
成員函式還是以一般的函式一樣的存在。a.fun 是通過fun a.this 來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,類所佔記憶體的大小不包括成員函式的大小,虛擬成員函式除外。同乙個類的多個物件共享函式 而我們訪問類的成員函式是通過類裡面的乙個指標實現,而這個指...
C 類所佔記憶體大小計算
c 類所佔記憶體大小計算 文章出處 作者 vision chen yeah.net 說明 筆者的作業系統是32位的。class a sizeof a sizeof a 1 明明是空類,為什麼編譯器說它是1呢?空類同樣可以例項化,每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目的,編譯器往往會...