Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆栈和堆在用户空间中的内存布局_C++_Visual Studio 2010_Visual Studio 2012_Memory_Operating System - Fatal编程技术网

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我犯了一个错误,很抱歉。看起来这是以前问过的。由于堆栈大小不是“无限的”,所以它不需要特别驻留在任何地方。无论如何,您不限于一个堆栈。你的照片很简单。