【问题标题】:Interpretation of memory layout内存布局解读
【发布时间】:2013-10-13 12:32:03
【问题描述】:

在这个page 上,有一个程序的部分内存布局的示例图像:

这样的图像中的每一行代表什么?每行是否代表单行物理内存?通常物理内存有32位或64位作为每一行,那么在这种情况下,图像中的每一行是否覆盖了几行物理内存?

谢谢。

【问题讨论】:

    标签: memory heap-memory memory-layout


    【解决方案1】:

    人们希望这是显而易见的,但是......

    上图中的每一行代表 16 个字节(假设地址每行增加十六进制 0x10,并且每行有 16 个字节)。

    “通常物理内存的每一行都是 32 位或 64 位”——嗯,不。物理内存主要分为 8 位字节。计算机可能具有从内存到 CPU 的 32 位或 64 位宽的传输路径,但该路径的宽度与理解上述图表无关。 (计算机中的术语“行”基本上只适用于“缓存行”,它是一组字节,从 16 字节长到 256 字节长(取决于设计),它们一起在一个“缓存”中——部分内存的高速“快照”。但这种缓存“透明”运行,因此在大多数情况下您可以忽略它的存在。)

    您将在上图中观察到,32 位地址中的数据是“little endian”——第一个“next”字段是30 00 43 00,而它指向的位置是00430030。内存中的字节与你或我“自然”读取它们的方式相反。

    所以这张图只是简单地展示了内存中的一些简单结构以及它们如何相互寻址。

    【讨论】:

      【解决方案2】:

      每两位数字组代表一个八位字节(字节)。它们通常以 16 个八位组为一组排列,因为它非常适合打印页面或终端屏幕。最左边八位字节的地址在左列(例如00430020)。

      此表示用作印刷约定,不一定与内存的物理结构有任何关系。

      【讨论】:

      • 结合我的两个答案,这是否意味着如果物理内存有 8 位作为每个条目,则每个八位字节都适合每个条目,从图中我们可以观察到虚拟地址每 16 个八位字节,当 CPU 需要 32 位/64 位数据时,它会从内存中获取多个八位字节?谢谢。
      • 这对内存的物理结构和 CPU 指令的字节顺序做出了太多假设。快速浏览源页面,他们使用抽象而非真实的机器展示了一个概念。给定的真实机器可能会这样做,但可能不会。
      猜你喜欢
      • 2011-03-10
      • 2016-04-11
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多