列舉佔多少位元組?

2022-06-01 11:15:10 字數 990 閱讀 9019

網上暫時只找到了這種描述:

標準c並沒有明確規定列舉型別占用空間的大小,標準中只是說「列舉型別的尺寸是以能夠容納最大枚舉子的值的整數的尺寸」,同時標準中也說明了:「列舉型別中的枚舉子的值必須要能夠用乙個int型別表述」,也就是說,列舉型別的尺寸不能夠超過int型別的尺寸,但是是不是必須和int型別具有相同的尺寸呢?上面的標準已經說得很清楚了,只要能夠容納最大的枚舉子的值的整數就可以了,那麼就是說可以是char、short和int。」不同的c編譯器,對enum型別的大小作了不同的定義,而程式設計師是不能認為的修改列舉型別占用空間的。

今天工作用到了,想查一下列舉型別佔多少個位元組,但是網上沒有找到確切的答案,可能還是因為用列舉的人比較少吧,自己測試了一下發現。

(1)列舉的大小是按照enum中元素最大值所佔的記憶體大小來決定的,不像結構體那樣有多少個元素就按各個元素所佔位元組疊加。

(2)當上圖中的one的值小於1000000000(9個0)時,列印出來的sizeof(test)就是4個位元組的,如下圖。

(3)當one的值大於等於10000000000(10個0)時,列印出來的sizeof(test)就是8個位元組的,如下圖。

(4)當one的值大於10000000000(10個0)後,無論再怎麼增加,列印出來的sizeof(test)保持8個位元組,不會增多。

可見列舉型別的大小會隨著其中的元素的大小而發生變化,雖然幾乎沒有人會用這麼大的數來作為列舉,但起碼我們得知道列舉型別位元組數的大小是有可能發生改變的,所以到程式中有資料需要和別的程式進行交流,譬如上位機和下位機的通訊資料,就盡量不要在資料報中包含有列舉型別,以免發生歧義。

struct佔多少位元組例題

1 位元組對齊的細節和編譯器實現相關,但一般而言,如在windows下,就vc而言,滿足一下三個準則 1 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 2 結構體每個成員相對於結構體首位址的偏移量 offset 都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組 interna...

C語言型別佔多少位元組

和機器字長及編譯器有關係 所以,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則 ansi iso制訂的 1 sizeof short int sizeof int 2 sizeof int sizeof long int 3 short int至少應為16位...

乙個漢字佔多少位元組

1 gbk編碼,乙個漢字佔2個位元組。2 utf 16編碼,通常漢字佔2個位元組,cjkv擴充套件b區 擴充套件c區 擴充套件d區中的漢字佔4個位元組 一般字元的unicode範圍是u 0000至u ffff,而這些擴充套件部分的範圍大於u 20000,因而要用兩個utf 16 3 utf 8編碼是...