Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么布尔值是一个字节,而它们实际上可以表示为一位?_C_Memory_Boolean_Ram - Fatal编程技术网

C 为什么布尔值是一个字节,而它们实际上可以表示为一位?

C 为什么布尔值是一个字节,而它们实际上可以表示为一位?,c,memory,boolean,ram,C,Memory,Boolean,Ram,为什么布尔值是一个字节,而它们实际上可以表示为一位? 我说的是stdbool.h。 不必要的7位RAM会被浪费吗 为什么布尔值是一个字节,而它们实际上可以表示为一位 布尔人是。位在C中不是对象,因为: 它不能通过指针寻址。对象包含1个或多个字节。字节是内存中最小的可寻址单元 无法应用sizeof和alignof 您仍然可以使用位字段用位表示布尔值,或使用位运算符在整数中切换位 为什么布尔值是一个字节,而它们实际上可以表示为一位 布尔人是。位在C中不是对象,因为: 它不能通过指针寻址。对象包

为什么布尔值是一个字节,而它们实际上可以表示为一位? 我说的是stdbool.h。 不必要的7位RAM会被浪费吗

为什么布尔值是一个字节,而它们实际上可以表示为一位

布尔人是。位在C中不是对象,因为:

  • 它不能通过指针寻址。对象包含1个或多个字节。字节是内存中最小的可寻址单元
  • 无法应用
    sizeof
    alignof
您仍然可以使用位字段用位表示布尔值,或使用位运算符在整数中切换位

为什么布尔值是一个字节,而它们实际上可以表示为一位

布尔人是。位在C中不是对象,因为:

  • 它不能通过指针寻址。对象包含1个或多个字节。字节是内存中最小的可寻址单元
  • 无法应用
    sizeof
    alignof

您仍然可以使用位字段用位表示布尔值,或使用位运算符在整数中切换位。

如何分配布尔值取决于编译器。如果对CPU指令集有意义,编译器可以将布尔值分配为一位。大多数CPU不能寻址位,只能寻址字节


不过,如果编译器愿意的话,它仍然可以自由地编写一些类似于1字节的内容,其中包含最多8个布尔分配的空间。但在实践中,这可能是以牺牲执行速度为代价的空间优化

如何分配它取决于编译器。如果对CPU指令集有意义,编译器可以将布尔值分配为一位。大多数CPU不能寻址位,只能寻址字节


不过,如果编译器愿意的话,它仍然可以自由地编写一些类似于1字节的内容,其中包含最多8个布尔分配的空间。但在实践中,这可能是以牺牲执行速度为代价的空间优化

大多数CPU架构不允许为变量只分配1位。1字节不必是8位,因为在大多数情况下,仅检查内存中1位的成本不值得保存其他7位,计算机将如何使用它们?这需要位寻址。另一种情况是CPU通常有用一位表示的标志,并且可以有位数组表示的布尔数组。@Algo字节是最小的可寻址单元。@UnholySheep:“分配”只是人类决定内存的用途。计算机在这个决定中没有发言权。计算机设计影响位是否可以单独访问,但也影响字节是否可以单独访问。C语言可以在只能加载和存储字而不能存储字节的处理器上实现。事实上,普通处理器只在内存中加载/存储多个字节;单个字节的可访问性是在处理器内部制造的。单个位的可访问性同样可以通过按位指令来实现。大多数CPU体系结构不允许为变量只分配1位。1字节不必是8位,因为在大多数情况下,仅检查内存中1位的成本不值得保存其他7位,计算机将如何使用它们?这需要位寻址。另一种情况是CPU通常有用一位表示的标志,并且可以有位数组表示的布尔数组。@Algo字节是最小的可寻址单元。@UnholySheep:“分配”只是人类决定内存的用途。计算机在这个决定中没有发言权。计算机设计影响位是否可以单独访问,但也影响字节是否可以单独访问。C语言可以在只能加载和存储字而不能存储字节的处理器上实现。事实上,普通处理器只在内存中加载/存储多个字节;单个字节的可访问性是在处理器内部制造的。单个位的可访问性可以类似地通过按位指令来制造。