Bat*_*eba 17
你可以创造
typedef struct foo
{
unsigned x:1;
} foo;
Run Code Online (Sandbox Code Playgroud)
你告诉编译器你只会使用一位的地方x.
但是由于结构填料的安排(C标准是为了故意灵活该编译器能够根据机器体系结构优化),它很可能会证明,这仍然在存储器中占据尽可能多的空间作为常规unsigned和阵列foo小号没有按"必须是按位连续的.
小智 5
如果你不需要数百万个这样的标志或者内存限制非常有限,那么最好的办法绝对是int.
这是因为int通常对应于平台的自然字大小,并且可以快速访问正确对齐的内容.无论如何,机器一次读取一个字,并且使用单个位需要屏蔽和移位,这需要花费时间.在具有千兆字节RAM的典型PC上,这将是愚蠢的.
如果内存消耗确实存在问题,则存在位域结构.