Zastanawiasz się, czy ktokolwiek zna flagę gcc, aby wyłączyć optymalizacje tailcall. Zasadniczo w optymalizacji tailcall, gcc zastąpi ramkę stosu, gdy wartość zwracana z wywoływanej funkcji zostanie przekazana (przez powrót) lub nic innego nie stanie się w funkcji.Jak wyłączyć optymalizacje tailcall w gcc
Oznacza to, że w
void main() {
foo();
}
void foo() {
bar();
}
void bar() {
/* at this point in code, the foo() stack frame no longer exists! */
}
Kiedy foo bar nazywa, gcc emituje kodu, który zastępuje ramkę stosu dla foo, zamiast dodawać nową ramkę stosu.
Moja firma ma odwijak stosu, który może wydrukować ślad stosu z dowolnego miejsca w kodzie. optymalizacja tailcall powoduje, że ramki stosu znikają, co może nieco zmylić ślad stosu.
Jestem kompilacji dla x86-64 przy użyciu gcc4.3.
Z góry dziękuję! Instrukcja P
sprawiedliwy. dzięki! – pgod