C++ 堆栈和堆在用户空间中的内存布局
我最近在研究操作系统,这里有一张在线图片,显示了用户空间和内核空间的内存布局,以及堆栈、堆等的布局。C++ 堆栈和堆在用户空间中的内存布局,c++,visual-studio-2010,visual-studio-2012,memory,operating-system,C++,Visual Studio 2010,Visual Studio 2012,Memory,Operating System,我最近在研究操作系统,这里有一张在线图片,显示了用户空间和内核空间的内存布局,以及堆栈、堆等的布局。 在这个图中,我看到堆栈位于用户空间中的最高内存地址,高于堆、数据段等 为了检查这一点,我使用了vs2012中“调试视图”下的“内存观察程序”窗口,下面是我的代码: int a = 3; int main() { int b = 5; int *p = new int[100]; delete [] p; return 0; } 我检查了a(数据段)、
在这个图中,我看到堆栈位于用户空间中的最高内存地址,高于堆、数据段等 为了检查这一点,我使用了vs2012中“调试视图”下的“内存观察程序”窗口,下面是我的代码:
int a = 3;
int main()
{
int b = 5;
int *p = new int[100];
delete [] p;
return 0;
}
我检查了a(数据段)、b(堆栈变量)和p(堆)
的内存地址,但我发现b的地址是三者中最低的,那么为什么结果与上图不同呢?
该图像看起来像Linux如何布置虚拟地址空间,而不是Microsoft Windows。我在win32中有一个程序的内存映射,它可能会有所帮助,它概述了不使用
/3gb
开关的系统的映射:
正如您所见,win32使用的内存映射与您发布的图中所示的linux(如另一个问题中所指出的)略有不同。我意识到这个内存图很旧,但是相同的基本原则大多适用于windows
如果你需要更多的信息,请告诉我,我会试着编一些东西:)+1问一个简洁明了的问题。我想a是数据段,b是堆栈?@Lashane我犯了一个错误,很抱歉。看起来这是以前问过的。由于堆栈大小不是“无限的”,所以它不需要特别驻留在任何地方。无论如何,您不限于一个堆栈。你的照片很简单。