【发布时间】:2013-07-25 15:38:17
【问题描述】:
众所周知,进程地址空间中的栈地址高于堆地址。但是当我在VS2010中写了一个程序来验证它时,我遇到了一些麻烦。堆栈的地址低于堆,甚至低于Data Segment的地址。程序如下:
#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:对不起,由于我的声誉不佳,没有图片,或者我可以更清楚地描述我的问题。
【问题讨论】:
标签: visual-c++ heap-memory stack-memory