在C中bool(布尔)占用了多少空间?它是1位,1字节还是别的什么?程序是32位还是64位是否重要?
cni*_*tar 20
如果您指的是C99,请_Bool尝试:
printf("%zu\n", sizeof(_Bool)); /* Typically 1. */
Run Code Online (Sandbox Code Playgroud)
注意标准说:
6.2.5
声明为type的对象
_Bool足以存储值0和1.
大小不能小于一个字节.但是大于一个字节是合法的.
C中最小的可寻址"事物"是a char.C中的每个变量都必须有唯一的地址,因此bool不能小于此.(注意,char但并不总是8位)
不管你是 32 位还是 64 位,这都是处理器指令的大小,完全不同的事情。
bool 接受实际的 1 位,因为您只需要 2 个不同的值。但是,当您执行 sizeof(bool) 时,它会返回 1,即 1 个字节。出于实际原因,剩余的 7 位被填充。
不能存储小于 1 个字节的变量。
-> bool 占用1字节
在旧的 C 标准中,没有定义这样的类型。然而,许多嵌入式微控制器包含特殊电路以允许有效处理单比特标志;有些允许对存储在任何地方的变量进行这种处理,而另一些则只允许对存储在特定内存区域中的变量进行处理。此类处理器的编译器允许将静态持续时间的单个变量声明为“位”类型;此类变量通常只占用一位存储空间(如有必要,在可容纳此类使用的区域内分配)。一些编译器允许将非递归例程的自动变量声明为“位”类型,但会默默地将它们视为“静态”(此类编译器提供的链接器要求例程识别它们调用的其他例程,
有几点值得注意:
我对 C99 或更高版本的 C 或 C++ 标准知之甚少,无法知道它们是否有任何没有地址的独立位类型的概念。我想不出有什么理由让这样的事情不可能发生,尤其是标准已经认识到结构位域之类的概念,它的行为很像左值但没有地址。一些链接器可能不支持这样的变量,但是可以通过使它们的实际大小依赖于实现来适应这样的链接器(实际上,除了程序速度或总内存使用量之外,不可能判断这些变量是被赋予 1 位还是 64 位每个)。
| 归档时间: |
|
| 查看次数: |
62332 次 |
| 最近记录: |