解释内存布局

时间:2013-10-07 02:36:26

标签: memory heap-memory memory-layout

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

enter image description here

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

您将在上图中看到的是,32位地址中的数据是“小端” - 第一个“下一个”字段是30 00 43 00,而它指向的位置是{{ 1}}。内存中的字节与你或我“自然地”阅读它们的方式相反。

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