2

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

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

+1

+1为简明明确的问题。 – Abhineet

+1

我想a是数据段,b是堆栈? –

+0

@Lashane我犯了一个错误,很抱歉。 –

回答

1

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

0

我在win32的一个程序,它可以帮助存储器映射,它概括了不使用/3gb交换系统的映射:

Win32 memory mapping

正如你所看到的win32使用了稍微不同的内存映射而不是Linux(正如在其他问题中指出的那样)你发布的图表看起来像什么。我意识到这个内存图很旧,但是相同的基本原则主要适用于Windows。

让我知道如果你需要更多的信息,但我会尽量沙沙作响:) :)