有哪些形式的内存地址空间被使用过?
如今,大型扁平虚拟地址空间很常见。历史上,曾使用过更复杂的地址空间,比如基地址和偏移量的对、段号和偏移量的对、字地址加上一些索引以表示字节或其它子对象等。
经常有人在回答和评论中断言C(或C++)指针本质上是整数,这是C(或C++)的一个错误模型,因为地址空间的多样性无疑是C(或C++)关于指针操作规则的一部分原因。例如,不定义数组外的指针算术简化了基地址和偏移量模型中的指针支持。指针转换的限制简化了地址加额外数据模型的支持。
这种经常出现的断言激发了这个问题。我正在寻找有关各种地址空间的信息,以说明C指针并不一定是一个简单的整数,并且鉴于要支持的各种机器的广泛性,C对指针操作的限制是明智的。
有用的信息可能包括:
- 具有各种地址空间的计算机体系结构的示例以及对这些空间的描述。
- 目前正在生产的机器中仍在使用各种地址空间的示例。
- 文档或说明的参考,特别是URL。
- 有关地址空间如何激发C指针规则的详细说明。
这是一个广泛的问题,因此我愿意听取有关如何管理它的建议。我很乐意看到单一的总体包容性答案上的协作编辑。然而,这可能无法按照应得的方式奖励声望。我建议对多个有用的贡献进行点赞。