枚举占多少字节?
⽹上暂时只到了这种描述:
标准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个字节,不会增多。
可见枚举类型的⼤⼩会随着其中的元素的⼤⼩⽽发⽣变化,虽然⼏乎没有⼈会⽤这么⼤的数来作为枚举,但起码我们得知道枚举类型字节数的⼤⼩是有可能发⽣改变的,所以到程序中有数据需要和别的程序进⾏交流,譬如上位机和下位机的通信数据,就尽量不要在数据包中包含有枚举类型,以免发⽣歧义。
发布评论