
面试官
自来也
某非X86的机器,栈增长方向未知,编程实现判断其栈增长方向。

面试官
自来也
补充:连续定义两个变量,可能被编译器优化,重新调整代码对应指令的顺序。
我们都知道x86体系结构,栈的增长方式是从高到低的。但这不意味着所有机器都是如此,这就是这道题目能站稳脚跟的基础。
另外就是根据补充条件,我们不能通过先后定义两个变量,然后再输出它们的地址来判断。
一种正确的解法:
#include <stdio.h>
#include <stdlib.h>
void func1();
void func2(int *a);
int main(int argc, char** argv) {
func1();
return 0;
}
void func1() {
int a = 0;
func2(&a);
}
void func2(int *a) {
int b = 0;
printf("%x\n%x\n", a, &b);
}
虽然变量定义的顺序可能被编译器优化调整,但是函数的调用关系,无论怎么优化都是不能被改变的。
将第一个函数func1中定义的变量a的地址传入调用函数func2中。然后在func2中声明变量b,通过输出这二者的地址即可判断出栈的增长方向。

相关阅读

本文介绍了一种在非X86架构下判断栈增长方向的方法,避免了因编译器优化而导致的不确定性。通过设计特定的函数调用流程,确保了即使在编译器优化的情况下也能准确判断栈的生长方向。

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



