根据计算机内存和C ++来定义“字节”有什么不同?

时间:2015-11-06 15:33:37

标签: c++

这是参考Stephen Prata的C ++ Primer Plus文本 -

字节表示计量单位意义上的8位存储单元,用于描述计算机中的存储量。 但是,C ++以不同方式定义字节。 C ++字节至少包含足够的相邻位,以适应实现的基本字符集。

你能解释一下C ++编译器是否有16位字节,而系统有8位字节,那么程序将如何在这样的系统上运行?

3 个答案:

答案 0 :(得分:16)

作者想要说的关于字节大小的内容是引用Wikipedia

  

主要商业计算架构的普及有助于无处不在地接受8位大小。

另一方面,C ++中的内存单位由内置类型char给出;在某些实现中,char可能是8位内存块;但是,在您的C ++程序中,每个sizeof(T)将以sizeof(char)的倍数表示,根据定义,它等于1

特定实现的字节中的位数记录在宏CHAR_BIT中,在标准头<climits>内定义。保证char至少为8位。

最后,这是C ++标准(§1.7, intro.memory )给出的 byte 的定义:

  

C ++内存模型中的基本存储单元是字节。一个字节至少足以容纳   基本执行字符集(2.3)的任何成员和Unicode UTF-8的8位代码单元   编码形式由连续的比特序列组成,其数量是实现定义的。   最低有效位称为低位;最重要的位称为高位   位。 C ++程序可用的内存由一个或多个连续字节序列组成。一切   byte有一个唯一的地址。

答案 1 :(得分:6)

  

一个字节表示一个8位的内存单元。

这是不正确的。

  

但是,C ++以不同的方式定义字节。

这也是不正确的。

在C ++术语和一般用语中,字节是最小的内存单位。 8位字节称为 octet

  

你能解释一下C ++编译器是否有16位字节,而系统有8位字节,那么程序将如何在这样的系统上运行?

不会。如果为一个字节为16位的体系结构编译程序,它将无法在具有字节为8位的体系结构的计算机上运行。

您必须为正在使用的处理器进行编译。

答案 2 :(得分:3)

曾经有一些机器具有可变字节大小或字节大小小于8.规范使它在给定硬件上实现开放。

DEC PDP-10的字长为36位,你可以指定一个字节的大小(通常是字的5个7位字节......)

http://pdp10.nocrew.org/docs/instruction-set/Byte.html