在C语言中,一个bool (boolean)会占用多少空间?它是1位、1字节还是其他什么?程序是32位还是64位有关系吗?
发布于 2011-11-05 02:38:01
如果您指的是C99 _Bool
,请尝试:
printf("%zu\n", sizeof(_Bool)); /* Typically 1. */
请注意,标准是这样写的:
6.2.5
声明为_Bool
类型的对象足够大,可以存储值0和1。
大小不能小于一个字节。但是大于一个字节是合法的。
发布于 2011-11-05 02:42:39
C中最小的可寻址“东西”是一个char
。C中的每个变量都必须有一个唯一的地址,因此您的bool
不能小于这个值。(请注意,char
并不总是8位)
发布于 2011-11-05 03:03:26
在较早的C标准中,没有定义这样的类型。然而,许多嵌入式微控制器包括特殊的电路,以允许有效地处理单位标志;一些允许对存储在任何地方的变量进行这种处理,而另一些则仅允许对存储在存储器的特定区域中的变量进行这种处理。用于这样的处理器的编译器允许静态持续时间的各个变量被声明为“位”类型;这样的变量通常只占用一位的存储(如果需要,在可以容纳这种使用的区域内分配)。一些编译器将允许非递归例程的自动变量被声明为“bit”类型,但会默默地将它们视为“静态”(此类编译器提供的链接器要求例程识别它们调用的其他例程,并将拒绝其中未标记为可重入的例程以相互递归的方式相互调用的程序)。
有几点值得注意:
编译器支持“真”位变量的
我对C99或更高版本的C或C++标准知之甚少,不知道他们是否有没有地址的独立位类型的概念。我想不出任何理由这样的事情是不可能的,特别是标准已经认识到像结构位字段这样的东西的概念,它的行为很像左值,但没有地址。一些链接器可能不支持这样的变量,但可以通过使它们的实际大小依赖于实现来适应这些链接器(实际上,除了程序速度或总内存使用之外,不可能区分这些变量分别是1位还是64位)。
https://stackoverflow.com/questions/8014161
复制相似问题