GCC 编译器一个字节中有多少位



根据C++规范

一个字节至少足够大,可以包含基本的任何成员 执行字符集 (2.3) 和 Unicode UTF-8 编码形式,由连续序列组成 位数,其数量由实现定义。

这意味着,一个字节中的位数必须为 8 位或大于 8 位。

现在,根据 gcc,位数由 ABI 确定。

https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Characters-implementation.html#Characters-implementation

4.4 角色

字节中的位数(C90 3.4、C99 和 C11 3.6)。

由 ABI 确定

海湾合作委员会基于 ABI - http://itanium-cxx-abi.github.io/cxx-abi/

谁能指出我提到字节位数的位置?

C++标准(因此大多数编译器)实际上只保证char至少是 8 个连续位。对于任何特定的编译,实际位数取决于目标 CPU 体系结构。

但是,在大多数情况下,您必须非常努力地找到没有 8 位字节的目标 CPU。

如果您必须编写依赖于 8 位字节假设的代码,则始终可以static_assert(CHAR_BIT == 8)以防止任何违反假设的编译。

谁能指出我提到字节位数的位置?

从学究上讲,事实并非如此。该特定 ABI 始终使用"字节"代替"八位字节";在现代,"字节"是"八位字节"的常见同义词,因为使用的绝大多数系统都有 8 位字节。

它确实是这样说的:

通常,本文档是作为通用规范编写的,可供各种体系结构上的C++实现使用。但是,它确实包含安腾 64 位 ABI 的处理器特定材料,并以此标识。在描述结构化数据布局的地方,我们通常假设安腾 psABI 成员大小。

...安腾芯片都有8位字节。

如果您使用的是其他芯片,并且它的每字节位数不同,并且您找到了针对该芯片的编译器,那么您就有了替代答案。(但它没有,你也没有。

这里实际上没有任何解释的余地,即使没有直接说明位和字节之间的关系。

如果我感到特别偏执,我偶尔会写一篇static_assert(CHAR_BIT == 8)。总的来说,你可以依靠这一点,除非你的目标是一些真正异国情调的东西。

最新更新