其他提示

在Java中,内存中每个枚举值只应该有一个实例。然后,对枚举的引用仅需要该引用的存储。检查枚举的值与任何其他参考比较一样有效。

bool可以实现为单个字节,但通常在结构中它会被具有对齐要求的其他元素包围,这意味着布尔值实际上将占用至少与int一样多的空间

现代处理器将来自主存储器的数据作为整个高速缓存行加载,64字节。从L1高速缓存加载一个字节和加载四个字节之间的区别可以忽略不计。

如果您正在尝试在高性能应用程序中优化缓存行,那么您可能会担心枚举的大小,但通常我会说定义枚举比使用布尔值更清楚。

在Java中,需要更多内存。在C ++中,它不需要相同类型的常量所需的内存(它在编译时计算并且在运行时没有剩余重要性)。在C ++中,这意味着枚举的默认类型将占用与int相同的空间。

在ISO C ++中,枚举没有义务大于其最大的枚举器要求。特别是,即使sizeof(bool)== sizeof(int),枚举{TRUE,FALSE}也可能具有sizeof(1)。根本没有要求。有些编译器使枚举的大小与int相同。这是一个编译器功能,这是允许的,因为标准只强加了最小值。其他编译器使用扩展来控制枚举的大小。

printf("%d", sizeof(enum));

在C ++中,枚举通常与int的大小相同。也就是说,编译器提供命令行开关以允许将枚举的大小设置为适合定义的值范围的最小大小并不罕见。

不,枚举通常与int的大小相同,与布尔值相同。

如果你的枚举只有两种情况,那么确实使用布尔值可能是一个更好的想法(内存大小,性能,用法/逻辑),甚至更多用Java。
如果你想知道内存成本,可能意味着你计划使用它们。在Java中,您可以使用BitSet类,或者在较小的规模上使用两种语言,您可以使用按位操作来操作位。

sizeof(枚举)取决于你在枚举中的含义。我最近试图使用默认构造函数params找到ArrayList()的大小,并且没有存储在其中的对象(这意味着存储的容量是10)。原来,ArrayList不是太大<!> lt; 100个字节。

因此,一个非常简单的枚举的sizeof(enum)应小于10个字节。你可以编写一个小程序,给它一定的内存,然后尝试分配枚举。你应该能够弄明白(这就是我发现ArrayList的记忆的方式)

BR,结果 〜A

在C / C ++中,枚举的大小与int相同。

使用gcc,您可以将属性((压缩))添加到枚举定义中,以使其占用最少的空间。如果枚举中的最大值是<!> lt; 256这将是一个字节,如果最大值是<!> lt,则为两个字节; 65536等。

typedef enum {
    MY_ENUM0,
    MY_ENUM1,
    MY_ENUM2,
    MY_ENUM3,
    MY_ENUM4,
    MY_ENUM5
} __attribute__((packed)) myEnum_e;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top