枚举占多少字节?

Posted xing-ting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举占多少字节?相关的知识,希望对你有一定的参考价值。

网上暂时只找到了这种描述:

  标准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个字节,不会增多。

 

  可见枚举类型的大小会随着其中的元素的大小而发生变化,虽然几乎没有人会用这么大的数来作为枚举,但起码我们得知道枚举类型字节数的大小是有可能发生改变的,所以到程序中有数据需要和别的程序进行交流,譬如上位机和下位机的通信数据,就尽量不要在数据包中包含有枚举类型,以免发生歧义。

 

以上是关于枚举占多少字节?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中,数字,汉字,英文字母,...占多少字节

python2.7中一个float 占多少字节

一个字节是多少?

JAVA基本数据类型所占字节数是多少

Java中文字符所占的字节数是多少?

intcharlong各占多少字节数