Ich frage mich, ob jemand das Flag für gcc kennt, um die Optimierung der Rufannahme zu deaktivieren. Im Grunde wird in einer Rückfalloptimierung gcc einen Stapelrahmen ersetzen, wenn der Rückgabewert von einer aufgerufenen Funktion übergeben wird (per Rückgabe) oder nichts anderes in der Funktion passiert.Wie deaktiviere ich die Tailcall-Optimierung in gcc
Das heißt, in
void main() {
foo();
}
void foo() {
bar();
}
void bar() {
/* at this point in code, the foo() stack frame no longer exists! */
}
Wenn foo ruft bar, gibt gcc Code, der den Stapelrahmen für foo ersetzt, anstatt einen neuen Stapelrahmen hinzufügen.
Meine Firma verfügt über einen Stapelabwickler, der eine Stapelverfolgung von jedem Punkt im Code aus drucken kann. Durch die Optimierung des hinteren Aufrufs werden Stack-Frames ausgeblendet, was die Stack-Trace etwas verwirren kann.
Ich kompiliere für x86-64 mit gcc4.3.
Vielen Dank im Voraus! P
Gerechten. Vielen Dank! – pgod