【发布时间】:2017-05-25 10:21:09
【问题描述】:
让我马上澄清这个听起来很柔和的标题。尽管感觉这是一个非常基本的问题,但这实际上已经困扰了我很长一段时间。
许多语言通过让开发人员使用位来给人一种效率的错误印象,例如bool.h C 标头,据我了解,它本质上只是一个带有包装器的 int。从本质上讲,字节似乎是 C 语言中绝对最低的计算原子单元 - bool x = 0 并不比 int x = 0 更快/内存效率更高。
然后我想知道的是,当我们想要实现一个本质上与加载和操作单个位相关的算法时,例如解码二进制代码、未加权图连接问题和许多其他问题,我们该怎么办?换句话说,字节的原子性是现代 CPU 的固有属性,还是我们可以理论上仅通过使用机器代码来与 ASIC 的效率相媲美?
编辑:对反对票感到非常惊讶,但我想人们只是不明白我在问什么。我认为一个非常好的典型示例是遍历二叉树(或任何其他是/否问题的顺序列表)。我想知道的是,现代 cpu 架构是否根本无法做到这一点(即与 ASIC/FPGA 相比),或者这是否是某个抽象层(语言/内核/等)的产物。不过,Mark 的回答很好(尽管我很想参考提到的架构扩展)
【问题讨论】:
-
bool.h和布尔值通常不是效率特性。您的问题是基于一种误解。 -
有一些具有位寻址存储器的架构。因此,此类架构的 C 编译器可能优化一些指令以使用这些细节。或者提供一些扩展命令给程序员这种能力。
-
好在问题不在于 bool 类型的效率
-
另外,ASIC 的力量并不在于操纵单个位。
-
调用位域。
标签: c cpu-architecture