C语言小问题——enum枚举类型占用内存大小问题

今天写程序时候写了个结构体,里面是一列定义的枚举类型变量。因为是做单片机软件开发,平时对变量空间占用比较敏感,所以思考起这个问题,查了博客和一些文章,发现基本都是在用sizeof()在电脑上进行测试,结果都是4字节,但这明显不是我找的答案。而且有一些帖子讨论问题是“如何减小枚举类型大小”、“如何将枚举类型大小降到最低”,大家都遇到这个问题了,下面是我的总结。

情况一:直接使用无值的枚举类型定义变量。枚举类型大小是由所编译器规定的int整数类型大小。

    如果这样,那么编译器会直接将变量类型大小设为和整数类型大小相同,例如32位处理器的程序位4字节。

    这样做的目的和好处是,变量的取值将是枚举类型这个集合内的,编译器不允许赋值枚举子之外的值。

    缺点就是,你的变量占用空间太大太浪费,因为大多数情况下只是定义个位数的枚举子,实际使用一个字节大小就可以完全表示。

情况二:使用普通类型定义变量,无值的枚举类型只进行赋值操作。枚举类型大小是由所赋值变量对象类型决定的。

    如果这样,那么你可以定义一个字符类型(1字节大小)变量,在对它进行赋值和判断操作时使用自定义的枚举子集合。

    这样做的目的和好处是,变量的操作将是枚举类型这个集合内的,阅读性好,直观。

    缺点就是,你的变量有可能使用了枚举子集合以外的值,而编译器不能做出提示,只能靠自己多

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值