繁体   English   中英

GCC编译器的字节数为多少位

[英]How many number of bits in a byte for GCC compiler

根据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决定

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM