2012-06-12 1 views
6

Ho una funzione che esegue solo poche operazioni come incrementi. L'ho dichiarato come inline e con lo __attribute__((hot)).impatto delle prestazioni della combinazione "hot" e "inline" per una definizione di funzione

Gcc Doc suggerisce seguente per l'attributo hot:

L'attributo caldo viene utilizzato per informare il compilatore che una funzione è un punto caldo del programma compilato. La funzione è ottimizzata più in modo aggressivo e su molti target viene inserita nella sottosezione speciale della sezione di testo in modo che tutte le funzioni attive vengano visualizzate ravvicinate migliorando la località.

che può essere interpretato come per le funzioni non inline hot sarebbero posizionati nell'area di indirizzo inferiore della mappa dell'indirizzo di processo. Ma le chiamate alle funzioni inline devono essere letteralmente sostituite dal loro codice. Quindi la domanda è come funziona davvero la combinazione di inline e hot?

risposta

1

Vedere When should I write the keyword 'inline' for a function/method? per una buona spiegazione della parola chiave inline. Sembra una contraddizione dichiarare una funzione come hoteinline; se la funzione non è definita in un file di intestazione o non è definita in più unità di compilazione, non è necessario dichiararla come inline.

In effetti, la decisione di sostituire la chiamata di funzione con la definizione della funzione e posizionarla "in-line" spetta al compilatore. Quindi la combinazione di inline e hot probabilmente ignora solo la parte inline e la inserisce nella sezione text.hot del programma. Il linker è l'unica parte del processo che tiene veramente alla parola chiave inline e quindi non fa necessariamente ciò che si potrebbe pensare che faccia.