a
并且b
都是int
类型,signed int
。它的长度为32 位,即 4 字节。
但是枚举ENUM
不需要那么多。
0000000000000000000000000000000 equals a
0000000000000000000000000000001 equals b
所以创造者想到了用8 bit的长度,最小长度 1 Byte来制作一个ENUM
更短的。int
bitfield
00000000 or 00000001
不过,他本可以char
从一开始就采用长度为 1 字节的类型。
在某些编译器上,您可以激活一项功能以确保枚举可以小于 int。使用 GCC 的 --short-enums 选项,使其使用仍然适合所有值的最小类型。
这是一个如何使用位域节省内存的示例。您会看到someBits
结构小于twoInts
结构。
#include "stdio.h"
struct oneInt {
int x;
};
struct twoInts {
int x;
int y;
};
struct someBits {
int x:2; // 2 Bits
int y:6; // 6 Bits
};
int main (int argc, char** argv) {
printf("type int = %lu Bytes\n", sizeof(int));
printf("oneInt = %lu Bytes\n", sizeof(struct oneInt));
printf("twoInts = %lu Bytes\n", sizeof(struct twoInts));
printf("someBits = %lu Bytes\n", sizeof(struct someBits));
return 0;
}
输出:
type int = 4 Bytes
oneInt = 4 Bytes
twoInts = 8 Bytes
someBits = 4 Bytes