结论:
一、a地址大于b地址大于d地址验证栈是由高到低分配地址的(先进后出),c地址小于f地址小于e地址验证堆地址分配是无序的(先进先出)。
二、无论堆或者栈,数组的内存的高低位都是由低到高的。原因即申请d[10]或者e时,是一次性申请的,而不是分十次申请的,这点不违反第一个结论。(这是我写此文的很重要的原因)
直接上测试代码:
int main()
{
printf("*************** 栈 ***************\n");
int a;
int b;
printf("a=%x,b=%x\n", &a, &b);
int d[10];
for (int i = 0; i < 10; i++)
{
printf("d[%d]=%x\n", i, &d[i]);
}
printf("*************** 堆 ***************\n");
int* c = new int;
printf("c=%x\n", c);
int *e = new int[10];
for (int i = 0; i < 10; i++)
{
printf("e[%d]=%x\n", i, &e[i]);
}
//delete c, c = nullptr;
int *f = new int;
printf("f=%x\n", f);
return 0;
}
运行结果:
*************** 栈 ***************
a=93fb6c,b=93fb60
d[0]=93fb30
d[1]=93fb34
d[2]=93fb38
d[3]=93fb3c
d[4]=93fb40
d[5]=93fb44
d[6]=93fb48
d[7]=93fb4c
d[8]=93fb50
d[9]=93fb54
*************** 堆 ***************
c=e509c8
e[0]=e51468
e[1]=e5146c
e[2]=e51470
e[3]=e51474
e[4]=e51478
e[5]=e5147c
e[6]=e51480
e[7]=e51484
e[8]=e51488
e[9]=e5148c
f=e508d8


4139

被折叠的 条评论
为什么被折叠?



