0
大家都知道,堆栈地址是比进程地址空间堆地址更高。但是当我编写一个程序在VS2010中验证它时,我遇到了一些麻烦。 堆栈的地址低于堆,甚至低于数据段的地址。该程序如下所示:为什么堆栈地址低于Visual C++中的堆栈地址?
#include "stdafx.h"
#include "malloc.h"
static int g_a=123;
int g_b=123;
int main()
{
static int a=123;
int b=123;
float c[10]={0};
int *p1=(int*)malloc(sizeof(int));
int *p2=(int *)malloc(5*sizeof(int));
}
下面是根据VS2010其地址:
&g_a 0x01097038
&g_b 0x0109703c
&a 0x01097040
&b 0x002af7a8
c 0x002af778
p1 0x00571500
p2 0x00571540
显然,指针P1,它指向一个阵列上的堆,具有比大地址b,它位于堆栈上。这就是为什么?
PS:对不起,没有图片由于我的名声不好,或者我可以更清楚地说明我的问题。
感谢ü的帮助,但我不知道谁是负责股票和堆,编译器或操作系统分配的地址的?我发现很多书在阐述Linux下的进程虚拟地址时都有相同的假设。如果给出相同的编译器,Windows将具有与Linux相同的内存布局吗? – TJUer
在Windows上,这是操作系统的责任。 –