Хотите знать, если кто-нибудь знает флаг для gcc, чтобы отключить оптимизацию tailcall. В основном при оптимизации хвостового вызова gcc заменит кадр стека, когда возвращаемое значение из вызываемой функции будет пропущено (через return) или в функции больше ничего не произойдет.
То есть в
void main() {
foo();
}
void foo() {
bar();
}
void bar() {
/* at this point in code, the foo() stack frame no longer exists! */
}
Когда foo вызывает bar, gcc выдает код, который заменяет кадр стека для foo, вместо добавления нового кадра стека.
В моей компании есть разматыватель стека, который может распечатывать трассировку стека из любой точки кода. Оптимизация tailcall приводит к исчезновению кадров стека, что может несколько запутать трассировку стека.
Я компилирую для x86-64, используя gcc4.3.
Заранее спасибо!
P