ご存知のように、スタック アドレスはProcess Address Spaceのヒープ アドレスよりも高くなっています。しかし、VS2010で検証するプログラムを書いたところ、トラブルに見舞われました。スタックのアドレスは heapよりも低く、データ セグメントのアドレスよりもさらに低くなります。プログラムは次のように示されます。
#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:私の評判が悪いために写真がなくて申し訳ありません。または、私の質問をより明確に説明することができます。