如果我像这样创建enum
enum test {
a=0,
b
};
类型enum test
的变量是否以1位的形式存储在内存中,因为这是表示它的最低要求?
答案 0 :(得分:3)
根据语言规范,保证枚举的大小最大为整数的大小。请记住,编译器可以在分析源代码时自由选择实际大小。
话虽如此,您可以使用https://godbolt.org/探索在不同CPU体系结构的负载下运行的各种C编译器的asm输出。从那里,您可以找出特定配置的实际大小。
答案 1 :(得分:2)
否。
好吧,编译器对其进行了优化,但并未针对内存进行优化。通常,这是您的CPU的本机大小。某些编译器会让您要求针对内存而不是速度进行优化(例如,GCC具有-fshort-enums
和__attribute__((__packed__))
),但是它们不会将存储量减少到单个位。
对于小于字节的任何内容,您都必须使用位域或位掩码,但是即使如此,您所要做的就是将多个值打包到一个字节中。