使用了哪些形式的内存地址空间?
今天,一个大的平面虚拟地址空间很常见。从历史上看,已经使用了更复杂的地址空间,例如基地址和偏移量的对、段号和偏移量的对、字地址加上字节或其他子对象的一些索引等等.
不时地,各种答案和评论断言 C(或 C++)指针本质上是整数。这对于 C(或 C++)来说是一个不正确的模型,因为地址空间的多样性无疑是 C(或 C++)中一些关于指针操作的规则的原因。例如,不在数组之外定义指针算术简化了对基本和偏移模型中指针的支持。指针转换的限制简化了对地址加额外数据模型的支持。
这个反复出现的断言引发了这个问题。我正在寻找有关各种地址空间的信息,以说明 C 指针不一定是简单的整数,并且鉴于要支持的机器种类繁多,C 对指针操作的限制是明智的。
有用的信息可能包括:
- 具有各种地址空间和这些空间描述的计算机体系结构示例。
- 当前制造的机器中仍在使用的各种地址空间的示例。
- 对文档或解释的引用,尤其是 URL。
- 详细说明地址空间如何激发 C 指针规则。
这是一个广泛的问题,因此我愿意接受有关管理它的建议。我很高兴看到对一个普遍包容的答案进行协作编辑。但是,这可能无法获得应得的声誉。我建议对多个有用的贡献进行投票。