Poznaj C++ w$ godziny0086

Poznaj C++ w$ godziny0086



72 Godzina 5

Kiedy wywołasz funkcję 10 razy, to program tyle samo razy „skoczy” do instrukcji danej funkcji. W pamięci istnieje tylko jedna kopia funkcji, a nie 10.

Jednak w ciągłym skakaniu z jednej funkcji do drugiej istnieje pewna niedogodność, związana z szybkością wykonywania programu. Niektóre funkcję są bardzo małe, jedna czy dwie linie kodu; możesz zwiększyć wydajność programu, jeśli unikniesz ciągłego skakania do tych kilku linii. Kiedy mówimy o wydajności programu, zazwyczaj mamy na myśli jego prędkość. Jest ona większa, gdy unikamy skoków do funkcji.

Jeśli funkcja jest zadeklarowana ze słowem kluczowym inline, to kompilator nie tworzy prawdziwej funkcji. Kopiuje natomiast jej kod w każde miejsce wywołania. Nie jest wykonywany żaden skok; wygląda to tak, jakbyś fizycznie wpisał treść funkcji zamiast ją wywoływać.

Pamiętaj jednak, że funkcje inline kosztują. Jeśli wywołasz taką funkcję dziesięciokrotnie to treść funkcji zostanie skopiowana w każde z dziesięciu miejsc wywołania. Niewielki wzrost wydajności może okazać się nieopłacalny w stosunku do wzrostu rozmiaru kodu wynikowego. Wzrost prędkości może być pozorny. Większość współczesnych kompilatorów posiada potężne wewnętrzne narzędzia i algorytmy do optymalizacji kodu, deklarowanie funkcji jako inline nie przynosi znaczących korzyści.

Kiedy zatem stosować funkcje inline? Kiedy masz małą funkcję (dwie, trzy linie), to możesz pomyśleć o zamienieniu ją na wewnętrzną. Jeśli masz jakiekolwiek wątpliwości to nie rób tego. Listing 5.6. demonstruje użycie funkcji wewnętrznych

Listing 5.6. Przykład użycia funkcji jako inline

1:

2:

3:

4:

5:

6:

7:

8:

9:

10

11

12

13

14

15

16

17

18

19

20 21 22

23

24

25

26


// Listing 5.6. - Użycie funkcji wewnętrznej

#include <iostream.h>

inline int RazyDwa(int);

int main()

{

int zrodlo;

cout « "Podaj liczbę: cin » zrodlo; cout « "\n";

zrodlo = RazyDwa(zrodlo);

cout « "Zrodlo: " « zrodlo « endl;

zrodlo = RazyDwa(zrodlo);

cout « "Zrodlo: " « zrodlo « endl;

zrodlo = RazyDwa(zrodlo);

cout « "Zrodlo: " « zrodlo « endl;

return 0;

)

Kiedy wywołasz funkcję 10 razy, to program tyle samo razy „skoczy” do instrukcji danej funkcji. W pamięci istnieje tylko jedna kopia funkcji, a nie 10.

Jednak w ciągłym skakaniu z jednej funkcji do drugiej istnieje pewna niedogodność, związana z szybkością wykonywania programu. Niektóre funkcję są bardzo małe, jedna czy dwie linie kodu; możesz zwiększyć wydajność programu, jeśli unikniesz ciągłego skakania do tych kilku linii. Kiedy mówimy o wydajności programu, zazwyczaj mamy na myśli jego prędkość. Jest ona większa, gdy unikamy skoków do funkcji.

Jeśli funkcja jest zadeklarowana ze słowem kluczowym inline, to kompilator nie tworzy prawdziwej funkcji. Kopiuje natomiast jej kod w każde miejsce wywołania. Nie jest wykonywany żaden skok; wygląda to tak, jakbyś fizycznie wpisał treść funkcji zamiast ją wywoływać.

Pamiętaj jednak, że funkcje inline kosztują. Jeśli wywołasz taką funkcję dziesięciokrotnie to treść funkcji zostanie skopiowana w każde z dziesięciu miejsc wywołania. Niewielki wzrost wydajności może okazać się nieopłacalny w stosunku do wzrostu rozmiaru kodu wynikowego. Wzrost prędkości może być pozorny. Większość współczesnych kompilatorów posiada potężne wewnętrzne narzędzia i algorytmy do optymalizacji kodu, deklarowanie funkcji jako inline nie przynosi znaczących korzyści.

Kiedy zatem stosować funkcje inline? Kiedy masz małą funkcję (dwie, trzy linie), to możesz pomyśleć o zamienieniu ją na wewnętrzną. Jeśli masz jakiekolwiek wątpliwości to nie rób tego. Listing 5.6. demonstruje użycie funkcji wewnętrznych

Listing 5.6. Przykład użycia funkcji jako Inline

1:    // Listing 5.6. - Użycie    funkcji wewnętrznej

2:

3:    #include <iostream.h>

4:

5:    inline int RazyDwa(int);

6:

7:    int main()

8:    i

9:    int zrodlo;

10:

11:    cout « "Podaj liczbę: ";

12:    cin » zrodlo;

13:    cout « "\n";

14:

15:    zrodlo = RazyDwa(zrodlo);

16:    cout « "Zrodlo: " « zrodlo « endl;

17:

18:    zrodlo = RazyDwa(zrodlo);

19:    cout « "Zrodlo: ” « zrodlo « endl;

20:

21:

22:    zrodlo = RazyDwa(zrodlo);

23:    cout « "Zrodlo: " « zrodlo « endl;

24:    return 0;

25:    )

26:


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0176 Referencje 165 Funkcja Potęgi () sprawdza poprawność parametru przekazaneg
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
70 (176) Rozdział szósty Czwartek - dzień ważenia. Przytyłam 10 deko. To o wiele za mało, żeby pójść
Wykłady 16.10. 1. NAUKA to zespół czynności i sposobów postępowania prowadzący do pozyskania wiedzy
POZNAJĘ CYFERKI Z PIESKIEM FIDO (24) Na kapeluszach grzybów z prawej strony narysuj tyle samo kropek
Poznaj C++ w$ godziny0037 Program w C++ 21 16:    cout « "Wywołanie funkcji Add(
Poznaj C++ w$ godziny0072 58 Godzina 5 Rysunek 5.1 W momencie wywołania funkcji program przechodzi d
Poznaj C++ w$ godziny0089 Funkcje 75 Kiedy wartość jest odkładana na stos, to jest umieszczana w kom
Poznaj C++ w$ godziny0155 144 Godzina 10Usuwanie obiektów Kiedy wywołasz delete na wskaźniku do obie
Poznaj C++ w$ godziny0181 170 Godzina 12 wyrzucany z pamięci poprzez wywołanie destruktora. Widać to
Poznaj C++ w$ godziny0026 10 Godzina 1 Oto kolejne fazy postępowania przy tworzeniu programu wykonyw
Poznaj C++ w$ godziny0035 Program w C++ 19Funkcje ■ain() jest funkcją specjalną. Jest automatycznie
Poznaj C++ w$ godziny0036 20 Godzina 2Korzystanie z funkcji Funkcja może zwracać albo jakąś wartość
Poznaj C++ w$ godziny0047 Zmienne i stałe 31Kiedy używać short a kiedy long Jednym z problemów progr
Poznaj C++ w$ godziny0056 Instrukcje i wyrażenia 41 Dzielenie całkowite wygląda trochę inaczej niż z
Poznaj C++ w$ godziny0065 50 Godzina 4 IA: Podaj dwie liczby. Pierwsza: 10 Druga: 2 Dzieła sie

więcej podobnych podstron