【发布时间】:2020-02-15 17:55:29
【问题描述】:
C11 标准的第 3.6 节将“字节”定义为“数据存储的可寻址单元……保存……字符”。
C++11 标准第 1.7 节将“字节”定义为“C++ 内存模型中的基本存储单元……包含……字符”。
两个定义都没有说“字节”是最小的可寻址单位。这是因为标准有意从特定机器中抽象出来吗?您能否提供一个真实的机器示例,其中 C/C++ 编译器决定“字节”比最小可寻址单元长/短?
【问题讨论】:
-
我最喜欢的不同寻常的架构之一是HP Saturn。它是一个 4 位 CPU,机器可以寻址半字节。有a gcc port,其中
char是8 位。这就是你要找的东西吗? -
我认为你不应该修改你的报价。 relevant C++11 section 说:“C++ 内存模型中的基本存储单元是字节。”这是一个完整的句子,没有限定。然后它添加“一个字节至少足够大以包含基本执行字符集的任何成员和[...]”。并在其后加上“每个字节都有一个唯一的地址。”。
-
嗯,sizeof(char)定义为1,char指针递增1,ptrdiff_t是整数类型。这意味着对于常规 C/C++ 指针,字符是内存的“单元”,是最小的可寻址实体。
-
@RaymondChen 不必这样做:它可以简单地将
CHAR_BIT定义为单词的大小。 -
@Ruslan 然而在 18/36 位字寻址系统上有相当多的 9 位字符的历史......
标签: c++ c language-lawyer standards memory-model