gpt4 book ai didi

c - 有哪些内存地址空间?

转载 作者:IT老高 更新时间:2023-10-28 21:52:29 25 4
gpt4 key购买 nike

使用了哪些形式的内存地址空间?

今天,大的平面虚拟地址空间很常见。从历史上看,已经使用了更复杂的地址空间,例如基地址和偏移量的对、段号和偏移量的对、字地址加上字节或其他子对象的一些索引等等.

不时地,各种答案和评论断言 C(或 C++)指针本质上是整数。这对于 C(或 C++)来说是一个不正确的模型,因为地址空间的多样性无疑是 C(或 C++)中一些关于指针操作的规则的原因。例如,不在数组之外定义指针算术简化了对基本和偏移模型中指针的支持。指针转换的限制简化了对地址加额外数据模型的支持。

这个反复出现的断言引发了这个问题。我正在寻找有关各种地址空间的信息,以说明 C 指针不一定是简单的整数,并且鉴于要支持的机器种类繁多,C 对指针操作的限制是明智的。

有用的信息可能包括:

  • 具有各种地址空间的计算机架构示例以及这些空间的描述。
  • 目前正在制造的机器中仍在使用的各种地址空间示例。
  • 对文档或解释的引用,尤其是 URL。
  • 详细说明地址空间如何激发 C 指针规则。

这是一个广泛的问题,因此我愿意接受有关管理它的建议。我很高兴看到对一个普遍包容的答案进行协作编辑。但是,这可能无法获得应得的声誉。我建议对多个有用的贡献进行投票。

最佳答案

几乎所有你能想象到的东西都可能被使用过。这第一个主要划分是字节寻址(所有现代架构)和字寻址(IBM 360/PDP-11 之前的版本,但我认为现代 Unisys 大型机仍然是字地址的)。在字寻址,char*void*通常会大于一个 int* ;即使它们不是更大,“字节选择器”将在高位,要求为 0,或除了字节之外的任何内容都将被忽略。 (在 PDP-10 上,例如,如果 pchar* , (int)p < (int)(p+1)将经常是假的,即使 intchar*有同样的大小。)

在字节寻址的机器中,主要的变体是分段的和非分段架构。两者仍然广泛传播今天,虽然在英特尔 32 位(分段具有 48 位地址的体系结构),一些更广泛的使用的操作系统(Windows 和 Linux)人为地限制用户处理到单个段,模拟平面寻址。

虽然我没有最近的经验,但我会期待更多各种嵌入式处理器。特别是,在过去,它嵌入式处理器经常使用哈佛架构,其中代码和数据位于独立地址中空格(以便将函数指针和数据指针强制转换为足够大的整数类型,可以比较相等)。

关于c - 有哪些内存地址空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com