Enum如何在C上分配内存?
我正在尝试使用C和Assembly(intelx8086)语言。
我也在使用一个class级,我的一个朋友给了我一个
typedef enum data_10 {a=0,b=7,c=10,} data_10_type;
我想按比例使用这个类(AKA构造它/在Assembly上销毁它)。 我的问题是,“枚举”需要多少内存?
虽然它可能因编译器而异,但enum
通常采用与int
相同的大小。 但是,可以肯定的是,你总是可以使用sizeof( data_10_type );
你为什么不打印它?
/* C99 */ #include typedef enum { a = 0, b = 7, c = 10 } data_10_type; printf("%zu\n", sizeof(data_10_type));
枚举器列表中的标识符声明为具有int
类型的常量( C11§6.7.2.2枚举说明符 ),因此sizeof(data_10_type)
通常等于sizeof(int)
,但它不是必需的!
顺便说一句,如果你想要一个大小的位,只需使用CHAR_BIT
常量(在
定义),它表示单个字节中有多少位)。
/* C99 */ #include #include typedef enum { a = 0, b = 7, c = 10 } data_10_type; printf("%zu\n", sizeof(data_10_type) * CHAR_BIT);
枚举根本不会占用任何记忆; 编译器可以理解它,并且在编译期间使用正确的数字。 它是一个int,其大小取决于您的系统。