0

ご存知のように、スタック アドレスは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:私の評判が悪いために写真がなくて申し訳ありません。または、私の質問をより明確に説明することができます。

4

1 に答える 1

2

「ご存知のように、スタック アドレスはプロセス アドレス空間のヒープ アドレスよりも高くなっています。」

ここでのあなたの仮定は間違っています。スタックとヒープはどちらもプロセスの仮想アドレス空間から割り当てられ、すべての意図と目的のために、そのアドレス空間の実質的にどこにでも配置できます。

于 2013-07-25T16:22:42.173 に答える