Funkcje inline - wielkość a wydajność

Funkcje inline - wielkość a wydajność
KS
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:41
0

Hey, mam następującą zagwozdkę:
Dlaczego funkcje inline powinny być krótkie, jaki wpływ na wydajność mają długie funkcje inline oraz dlaczego ma to w ogóle wpływ na wydajność? W końcu funkcja inline zamienia kod funkcji na kod zwykły kod. Zastanawiam się więc dlaczego funkcja, która nie jest inline miałaby się wykonać szybciej niż ta sama część kodu wewnątrz innej funkcji bardziej rozbudowanej?
Z góry dzięki za wyjaśnienie.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
4

Ponieważ może nie starczyć rejestrów i będziesz ostatecznie miał jedną, dużą funkcję zajmując pełno rejestrów oraz miejsca na stosie.


Zobacz pozostałe 5 komentarzy
L0
myślałem, że gdy funkcja jest inline, to kompilator potrafi być jeszcze sprytniejszy :)
Patryk27
Nah, wszelkie inline, registry czy wstawki assemblerowe nie sprzyjają optymalizacjom.
spartanPAGE
@Patryk27 inline to tylko drobna sugestia dla kompilatora ;) Chociażby przy słodziutkich metodach(tak je nazwę, o!) które sprowadzają się do tego, o czym wspomniał @Shalom jest to idealne.
Patryk27
Żyjemy w XXI wieku, jak zechce to sam zinlinuje i bez podpowiedzi. Nawet FPC tak robi (bodajże dla niego "prosta" funkcja to taka składająca się max z jednego warunku, kiedyś zaglądałem do źródeł), a co dopiero te wszystkie wyrafinowane GCCki czy inne ;]
Endrju
Od zawsze zapominacie, że inline ma też inne znaczenie niż tyllko wstawianie kodu w miejsce wywołania. http://4programmers.net/Forum/C_i_C++/253524-funkcje_inline_w_c?p=1148607#id1148607
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

Jest też kwestia względnego wzrostu wydajności. inliniowanie funkcji sprawia że oszczędzasz na:

  • zapisaniu na stosie adresu powrotu
  • skoku do funkcji
  • powrocie z funkcji
    Teraz jeśli twoja funkcja to jest jedna instrukcja to widać że wykonasz 1 instrukcje zamiast 4, czyli zysk dość spory. Ale jeśli twoja funkcja to jest 996 instrukcji to oszczędasz raptem 0.4% czyli raczej niewiele.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KS
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 8 lat
  • Postów:41
0

Ok, dzięki za wyjaśnienie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.