我最近正在研究操作系统,这是一张在线图片,显示了用户空间和内核空间的内存布局,以及堆栈,堆等的布局。
在此图中,我看到堆栈位于用户空间中的最高内存地址,高于堆,数据段等。
为了检查一下,我在调试视图下使用了vs2012中的内存观察窗口,这是我的代码:
int a = 3;
int main()
{
int b = 5;
int *p = new int[100];
delete [] p;
return 0;
}
我检查了a(data segment),b(stack variable) and p(heap)
的内存地址,但我发现b中的地址是最低的,为什么结果与上图不同?
答案 0 :(得分:1)
该图像看起来像是Linux如何布局虚拟地址空间,而不是Microsoft Windows。
答案 1 :(得分:1)
我在win32中有一个程序的内存映射可能有帮助,它概述了不使用/3gb
开关的系统的映射:
正如你所看到的,win32使用的内存映射略大于linux(正如另一个问题所指出的那样),你发布的图表看起来就像。我意识到这个内存图是旧的,但是相同的基本原则主要适用于Windows。
如果您需要更多信息,请告诉我,我会尝试沙沙作响:)