用户空间中堆栈和堆的内存布局

时间:2014-04-02 04:36:44

标签: c++ visual-studio-2010 visual-studio-2012 memory operating-system

我最近正在研究操作系统,这是一张在线图片,显示了用户空间和内核空间的内存布局,以及堆栈,堆等的布局。
在此图中,我看到堆栈位于用户空间中的最高内存地址,高于堆,数据段等。

enter image description here

为了检查一下,我在调试视图下使用了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中的地址是最低的,为什么结果与上图不同? enter image description here

2 个答案:

答案 0 :(得分:1)

该图像看起来像是Linux如何布局虚拟地址空间,而不是Microsoft Windows。

答案 1 :(得分:1)

我在win32中有一个程序的内存映射可能有帮助,它概述了不使用/3gb开关的系统的映射:

Win32 memory mapping

正如你所看到的,win32使用的内存映射略大于linux(正如另一个问题所指出的那样),你发布的图表看起来就像。我意识到这个内存图是旧的,但是相同的基本原则主要适用于Windows。

如果您需要更多信息,请告诉我,我会尝试沙沙作响:)