2010-09-09 13 views
8

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

Antwort

25

GCC Handbuch:

-foptimize-sibling-calls 
     Optimize sibling and tail recursive calls. 

     Enabled at levels -O2, -O3, -Os. 

kompilieren Also entweder mit -O0/-O1 oder -fno-optimize-sibling-calls verwenden.

+0

Gerechten. Vielen Dank! – pgod

Verwandte Themen