枚举常量标签消耗内存吗?

时间:2014-05-31 14:11:39

标签: c enums

enum定义enum常量是否消耗C中的内存?

例如,如下所示

enum week { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };

枚举常量,例如,SUNDAY占用内存吗?

2 个答案:

答案 0 :(得分:2)

定义不占用运行时内存。它们显然在编译时占用了内存,但并不多。

如果您编写以下代码来声明变量(在此示例中为my_weekday),则需要运行时内存。消耗的字节数取决于编译器,目标机器架构的对齐规则以及枚举的基数。

enum week my_weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
                       THURSDAY, FRIDAY, SATURDAY };

如果你的代码为这样一个变量分配一个常量,那么常量将占用代码内联空间或编译器构造的只读文字池中的空格。

my_weekday = SUNDAY;

如果将枚举常量(或此类常量的地址)作为实际参数传递给函数,它将在调用堆栈中获得分配的空间。请注意,一些topnotch全局优化可能会改为使用机器寄存器。

类似地,如果使用switch-case或条件语句,将为枚举常量分配代码空间或文字池空间。

答案 1 :(得分:0)

没有。这些是常量,不占用任何内存,也没有地址。事实上,SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY并不存在于记忆中的任何地方。但是你可以检查类型enum本身是否占用int大小的内存(类型的选择是实现定义的)。