[英]How many number of bits in a byte for GCC compiler
根据C ++规范
一个字节至少足以包含基本执行字符集(2.3)的任何成员和Unicode UTF-8编码形式的八位代码单元,并由连续的位序列组成,其数量为实施定义。
这意味着,一个字节中的位数必须是8位或大于8位。
现在,根据gcc,比特数由ABI确定。
4.4字符
字节中的位数(C90 3.4,C99和C11 3.6)。
由ABI决定
GCC基于ABI - http://itanium-cxx-abi.github.io/cxx-abi/
有人能指出我提到一个字节中的位数的位置吗?
C ++标准(以及大多数编译器)有效地仅保证char
至少为 8个连续位。 对于任何特定编译,实际位数取决于目标CPU架构。
但是,在大多数情况下,您必须非常努力地找到没有8位字节的目标CPU。
如果你必须编写依赖于8位字节假设的代码,那么你总是可以使用static_assert(CHAR_BIT == 8)
来防止任何违反你假设的编译。
有人能指出我提到一个字节中的位数的位置吗?
小心翼翼,事实并非如此。 那个特殊的ABI用“字节”代替“八位字节”; 在现代,“字节”是“八位字节”的常见同义词,因为绝大多数系统使用的是8位字节。
它确实这样说:
通常,本文档是作为通用规范编写的,可供各种体系结构上的C ++实现使用。 但是,它确实包含Itanium 64位ABI的处理器特定材料,如此标识。 在描述结构化数据布局的地方,我们通常假设Itanium psABI成员大小。
...而Itanium芯片都有8位字节。
如果您正在使用其他芯片,并且每个字节的位数不同,并且您找到了针对该芯片的编译器,那么您可以选择其他答案。 (但它没有,你没有。)
这里没有任何解释空间,即使比特和字节之间的关系没有完全说明。
如果我感到特别偏执,我偶尔会写一个static_assert(CHAR_BIT == 8)
。 总的来说,你可以依靠这个,除非你的目标是异国情调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.