2010-09-09 23 views
8

Chiedersi se qualcuno conosce il flag per gcc per disabilitare le ottimizzazioni tailcall. Fondamentalmente nell'ottimizzazione del tailcall, gcc sostituirà uno stack frame quando il valore restituito da una funzione chiamata viene passato (tramite return) o non succede nient'altro nella funzione.Come disabilitare le ottimizzazioni tailcall in gcc

Cioè, in

void main() { 
    foo(); 
} 

void foo() { 
    bar(); 
} 

void bar() { 
    /* at this point in code, the foo() stack frame no longer exists! */  
} 

Quando foo chiama bar, gcc emette codice sostituisce lo stack frame alimentare d, piuttosto che aggiungere un nuovo stack frame.

La mia azienda dispone di uno srotolatore che può stampare una traccia di stack da qualsiasi punto nel codice. l'ottimizzazione di tailcall fa sparire i frame dello stack, il che può confondere la traccia dello stack.

Sto compilando per x86-64 utilizzando gcc4.3.

Grazie in anticipo! manuale P

risposta

25

GCC:

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

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

Quindi, o compilare con -O0/-O1, o utilizzare -fno-optimize-sibling-calls.

+0

giusti. Grazie! – pgod

Problemi correlati