在C ++中,枚举数据类型消耗了多少内存?

时间:2015-10-07 09:07:42

标签: c++ memory enums

假设我在某处声明了以下枚举:

enum yin_yang {
    yin,
    yang
};

我希望像这样使用新的数据类型:

yin_yang balance = yang;

系统的内存将“平衡”占用多少? 1位,1字节还是别的什么?

5 个答案:

答案 0 :(得分:3)

它是否实际占用内存取决于优化器对您的代码执行的操作,但如果您想知道类型或对象的字节大小,则可以使用sizeof运算符:

std::cout << sizeof(yin_yang) << std::endl;
std::cout << sizeof(balance) << std::endl;

这并不意味着balance实际上必须在运行时占用内存空间。它可以完全优化。但是在编译时可以知道对象的大小。

答案 1 :(得分:2)

至少在C ++ 11中,您可以指定要用作枚举基础的整数类型:

render

否则编译器选择基类型,它将是一个整数类型,但是没有指定哪个IIRC(我相信很多编译器默认为enum yin_yang : uint8_t { yin, yang }; )。基类型确定枚举实例的存储要求。

答案 2 :(得分:0)

您可以使用一元运算符'sizeof'来计算任何变量或数据类型的大小,以字节大小单位的数量来衡量。

答案 3 :(得分:0)

对于范围内的枚举,相关部分摘自C ++ 14, [decl.enum]

  

对于其基础类型未修复的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值。如果没有整数类型可以表示所有枚举器值,则枚举是不正确的。它是实现定义的,使用整数类型作为基础类型,除了基础类型不应大于int,除非枚举器的值不适合intunsigned int 。如果枚举器列表为空,则基础类型就好像枚举具有值为0的单个枚举器。

因此,如果枚举状态在int中可表示,那么它保证为≤sizeof(int),如果不是,则保证更大。<asp:GridView CssClass="table table-striped table-bordered table-condensed" ID="gvDatos" runat="server" DataKeyNames="IdIngrediente" AllowPaging="True" PageSize="4" onselectedindexchanged="GridView_SelectedIndexChanged" onrowcreated="gvDatos_RowCreated" onpageindexchanging="gvDatos_PageIndexChanging"> 当然,如果您明确指定了基础类型,那么您就知道它的大小了。

答案 4 :(得分:0)

枚举类型是一种特殊的数据类型,它使变量可以是一组预定义的常量,无论它有多少个单位

例如,

枚举天数{星期日,星期一,星期二,星期三,星期四,星期五,星期六};

枚举字母{a,b,c,d};

以上两个枚举数据的大小仅为4个字节