2012-04-26 17 views
6
void run_hot(void) { 
    // I am called very often! 
    serve(); 
    // <more code here> 
} 

void run_cold(void) { 
    // I am called only occasionally! 
    serve(); 
    // <more code here> 
} 

???inline??? void serve(void) { 
    // I only want to be called inline from hot functions! 
    // <more code here> 
} 

Esiste un modo per inline esplicitamente una funzione Un in una funzione B mentre esplicitamente non inlining la stessa funzione A in una funzione C? O sono completamente in balia del mio compilatore?Posso inserire una funzione parzialmente/selettivamente in linea?

+0

È possibile inibire l'inlining inserendo una funzione in un'unità di compilazione separata. –

+0

@JensGustedt Puoi fare un esempio? Sto avendo qualche difficoltà a indovinare quale tipo di schema hai in mente. – Will

+0

Se non si desidera che una funzione sia in linea, posizionare la definizione in un file .c separato e compilarlo separatamente. –

risposta

4

Sei completamente in balia del compilatore con inlining.
Lasciare da parte in parte, indipendentemente dal fatto che sia o meno una inline una funzione è solo una decisione che è meglio fatta dal compilatore e si dovrebbe fare affidamento su di essa per prendere la decisione migliore.

+0

> se inline una funzione è solo una decisione che è meglio fatta dal compilatore In effetti, sembra essere la saggezza convenzionale, e normalmente la cosa più intelligente da fare, ma mi chiedo di alcuni casi in cui, al fine di giudicare quali funzioni sono "calde", il compilatore deve conoscere il tipo di dati che il programma gestirà, il che ovviamente non sa se i dati arrivano dall'IO esterno. Quindi, mi sembra, ci sono casi in cui il programmatore umano sa meglio ... – Will

+3

@Will Se si utilizza GCC, è possibile usare '__attribute __ ((hot))' per dire al compilatore di ottimizzare maggiormente quella funzione, quindi non dovrebbe indovinare. – ughoavgfhw

+0

@ughoavgfhw Eccellente! Grazie! – Will

Problemi correlati