【发布时间】:2015-02-21 16:03:54
【问题描述】:
据我所知,堆栈应该向下增长。
我试图运行这段代码:
#include<stdio.h>
void func(char* a1, int a2, int a3) {
char b1[10];
int b2;
int b3;
printf("a3 address is: %p\n", &a3);
printf("a2 address is: %p\n", &a2);
printf("a1 address is: %p\n", &a1);
printf("-----------------------\n");
printf("b1 address is: %p\n", &b1);
printf("b2 address is: %p\n", &b2);
printf("b3 address is: %p\n", &b3);
}
int main() {
func("string",2,3);
return 0;
}
结果并不如我所料:
a3 address is: 0x7fff68473190
a2 address is: 0x7fff68473194
a1 address is: 0x7fff68473198
-----------------------
b1 address is: 0x7fff684731b0
b2 address is: 0x7fff684731a8
b3 address is: 0x7fff684731ac
我不希望 b1,b2,b3 以我声明它们的相同方式订购。我知道编译器可能会更改该顺序以启用优化和对齐,但为什么看起来堆栈似乎向高地址而不是低地址增长?
【问题讨论】:
-
您正在比较单个堆栈帧中的变量,而不是单个堆栈帧...