今天写程序时候写了个结构体,里面是一列定义的枚举类型变量。因为是做单片机软件开发,平时对变量空间占用比较敏感,所以思考起这个问题,查了博客和一些文章,发现基本都是在用sizeof()在电脑上进行测试,结果都是4字节,但这明显不是我找的答案。而且有一些帖子讨论问题是“如何减小枚举类型大小”、“如何将枚举类型大小降到最低”,大家都遇到这个问题了,下面是我的总结。
情况一:直接使用无值的枚举类型定义变量。枚举类型大小是由所编译器规定的int整数类型大小。
如果这样,那么编译器会直接将变量类型大小设为和整数类型大小相同,例如32位处理器的程序位4字节。
这样做的目的和好处是,变量的取值将是枚举类型这个集合内的,编译器不允许赋值枚举子之外的值。
缺点就是,你的变量占用空间太大太浪费,因为大多数情况下只是定义个位数的枚举子,实际使用一个字节大小就可以完全表示。
情况二:使用普通类型定义变量,无值的枚举类型只进行赋值操作。枚举类型大小是由所赋值变量对象类型决定的。
如果这样,那么你可以定义一个字符类型(1字节大小)变量,在对它进行赋值和判断操作时使用自定义的枚举子集合。
这样做的目的和好处是,变量的操作将是枚举类型这个集合内的,阅读性好,直观。
缺点就是,你的变量有可能使用了枚举子集合以外的值,而编译器不能做出提示,只能靠自己多