P*******b 发帖数: 1001 | 1 为什么要定义一个函数呢?
为啥不能直接用两个local变量比较地址?
thanks |
t******e 发帖数: 1293 | 2 两个local变量不一定准确
int a, b;
可能a在b之前,也可能b在a之前的。还是定义子函数的好。
因为每个函数都会在栈上有一个frame
这些frames都是在栈顶上涨的,所以,用这个来判断栈的生长方向是最准确的。
【在 P*******b 的大作中提到】 : 为什么要定义一个函数呢? : 为啥不能直接用两个local变量比较地址? : thanks
|
P*******b 发帖数: 1001 | 3 thanks!
两个变量为什么不准确呢?
是因为他们初始化的顺序undefined吗?
【在 t******e 的大作中提到】 : 两个local变量不一定准确 : int a, b; : 可能a在b之前,也可能b在a之前的。还是定义子函数的好。 : 因为每个函数都会在栈上有一个frame : 这些frames都是在栈顶上涨的,所以,用这个来判断栈的生长方向是最准确的。
|
I*********g 发帖数: 93 | 4 可能编译器对这个behavior是 undefined的吧。不一定按顺序放,编译器可能做点优化
什么的 |
d********e 发帖数: 132 | 5 Here is a solution I found:
#include
void sub(int *a) {
int b;
if (&b > a) {
printf("Stack grows up.");
} else {
printf("Stack grows down.");
}
}
main () {
int a;
sub(&a);
} |
P*******b 发帖数: 1001 | 6 只能这么理解了。但是还是不确定。
【在 I*********g 的大作中提到】 : 可能编译器对这个behavior是 undefined的吧。不一定按顺序放,编译器可能做点优化 : 什么的
|
a****n 发帖数: 1887 | 7 这个stack 是指函数调用的堆栈, 当然需要用函数确定了
这个题本身就是问被调函数和主调函数的栈的顺序
每一个frame里面放的都是当前的函数需要的局部变量和环境参数,具体一个函数内的
局部变量的顺序编译器相关 |