我想知道是否有人知道gcc禁用尾调用优化的标志。在尾调用优化中,当从被调用函数返回值(通过return)或函数内没有其他操作时,gcc将替换栈帧。
也就是说,在
void main() {
foo();
}
void foo() {
bar();
}
void bar() {
/* at this point in code, the foo() stack frame no longer exists! */
}
当 foo 调用 bar 时,gcc 会发出代码,替换 foo 的堆栈帧,而不是添加一个新的堆栈帧。
我的公司有一个堆栈展开器,可以从代码中的任何点打印出堆栈跟踪。尾调用优化会使堆栈帧消失,这可能会使堆栈跟踪有些混乱。
我正在使用 GCC 4.3 编译 x86-64。