【发布时间】:2013-10-13 12:32:03
【问题描述】:
在这个page 上,有一个程序的部分内存布局的示例图像:
这样的图像中的每一行代表什么?每行是否代表单行物理内存?通常物理内存有32位或64位作为每一行,那么在这种情况下,图像中的每一行是否覆盖了几行物理内存?
谢谢。
【问题讨论】:
标签: memory heap-memory memory-layout
在这个page 上,有一个程序的部分内存布局的示例图像:
这样的图像中的每一行代表什么?每行是否代表单行物理内存?通常物理内存有32位或64位作为每一行,那么在这种情况下,图像中的每一行是否覆盖了几行物理内存?
谢谢。
【问题讨论】:
标签: memory heap-memory memory-layout
人们希望这是显而易见的,但是......
上图中的每一行代表 16 个字节(假设地址每行增加十六进制 0x10,并且每行有 16 个字节)。
“通常物理内存的每一行都是 32 位或 64 位”——嗯,不。物理内存主要分为 8 位字节。计算机可能具有从内存到 CPU 的 32 位或 64 位宽的传输路径,但该路径的宽度与理解上述图表无关。 (计算机中的术语“行”基本上只适用于“缓存行”,它是一组字节,从 16 字节长到 256 字节长(取决于设计),它们一起在一个“缓存”中——部分内存的高速“快照”。但这种缓存“透明”运行,因此在大多数情况下您可以忽略它的存在。)
您将在上图中观察到,32 位地址中的数据是“little endian”——第一个“next”字段是30 00 43 00,而它指向的位置是00430030。内存中的字节与你或我“自然”读取它们的方式相反。
所以这张图只是简单地展示了内存中的一些简单结构以及它们如何相互寻址。
【讨论】:
每两位数字组代表一个八位字节(字节)。它们通常以 16 个八位组为一组排列,因为它非常适合打印页面或终端屏幕。最左边八位字节的地址在左列(例如00430020)。
此表示用作印刷约定,不一定与内存的物理结构有任何关系。
【讨论】: