2012-06-12 13 views
6

Mam funkcję, która wykonuje tylko kilka operacji, takich jak przyrosty. Ogłosiłem to jako inline oraz z __attribute__((hot)).Wpływ wydajności kombinacji "gorący" i "wbudowany" dla definicji funkcji

Gcc Doc proponuje następujące atrybutu hot:

Gorący atrybut jest używany do poinformowania kompilatora, że ​​funkcja jest hot spot skompilowanego programu. Funkcja jest zoptymalizowana bardziej agresywnie i na wielu celach jest umieszczana w specjalnej podsekcji sekcji tekstowej, dzięki czemu wszystkie gorące funkcje pojawiają się blisko siebie, poprawiając lokalizację.

, które można interpretować tak, jak w przypadku innych funkcji niż inline, które zostałyby umieszczone w dolnym obszarze adresowym mapy adresu procesu. Ale funkcje wywoływania funkcji inline powinny być dosłownie zastąpione przez ich kod. Pytanie brzmi więc, jak naprawdę działa kombinacja inline i hot?

Odpowiedz

1

Zapoznaj się z artykułem When should I write the keyword 'inline' for a function/method?, aby uzyskać całkiem dobre wyjaśnienie słowa kluczowego inline. Wydaje się, że sprzeczność oznacza deklarowanie funkcji jako hot i; jeśli funkcja nie jest zdefiniowana w pliku nagłówkowym lub nie jest zdefiniowana w wielu jednostkach kompilacji, nie należy jej deklarować jako inline.

W rzeczywistości decyzja o zastąpieniu wywołania funkcji definicją funkcji i umieszczeniu jej "w linii" należy do kompilatora. Tak więc kombinacja inline i hot prawdopodobnie po prostu ignoruje część inline i umieszcza ją w sekcji text.hot programu. Łącznik jest jedyną częścią procesu, która naprawdę dba o słowo kluczowe inline, a następnie niekoniecznie robi to, co myślisz, że robi.

Powiązane problemy