C是否优化枚举的大小?

时间:2018-12-16 03:32:56

标签: c gcc enums

如果我像这样创建enum

enum test {
  a=0,
  b
};

类型enum test的变量是否以1位的形式存储在内存中,因为这是表示它的最低要求?

2 个答案:

答案 0 :(得分:3)

根据语言规范,保证枚举的大小最大为整数的大小。请记住,编译器可以在分析源代码时自由选择实际大小。

话虽如此,您可以使用https://godbolt.org/探索在不同CPU体系结构的负载下运行的各种C编译器的asm输出。从那里,您可以找出特定配置的实际大小。

答案 1 :(得分:2)

否。

好吧,编译器对其进行了优化,但并未针对内存进行优化。通常,这是您的CPU的本机大小。某些编译器会让您要求针对内存而不是速度进行优化(例如,GCC具有-fshort-enums__attribute__((__packed__))),但是它们不会将存储量减少到单个位。

对于小于字节的任何内容,您都必须使用位域或位掩码,但是即使如此,您所要做的就是将多个值打包到一个字节中。