wysoce wydajny c++. opanuj sztukę optymalizowania działania kodu. wydanie ii cała książka.pdf

(6441 KB) Pobierz
Tytuł oryginału: C++ High Performance: Master the art of optimizing the functioning of your C++ code,
2nd Edition
Tłumaczenie: Tomasz Walczak
ISBN: 978-83-283-9708-8
Copyright © Packt Publishing 2020. First published in the English language under the title ‘C++ High
Performance - 2nd Edition’ – (9781839216541).
Polish edition copyright © 2023 by Helion S.A.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz wydawca dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani a związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Autor raz ydawca nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody ynikłe z wykorzystania informacji zawartych w książce.
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
https://helion.pl/user/opinie/wywyc2
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
https://ftp.helion.pl/przyklady/wywyc2.zip
Helion S.A.
ul. Kościuszki 1c, 44-100 Gliwice
e-mail:
helion@helion.pl
WWW:
https://helion.pl
(księgarnia internetowa, katalog książek)
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
Spis treści
Przedmowa
O autorach
O korektorach merytorycznych
Wprowadzenie
Dla kogo przeznaczona jest ta książka?
Zawartość książki
Jak najlepiej skorzystać z tej książki?
Pobieranie plików z przykładowym kodem
Stosowane konwencje typograficzne
11
13
14
15
16
16
17
18
19
Rozdział 1. Krótkie wprowadzenie do języka C++
Dlaczego C++?
Bezkosztowe abstrakcje
Przenośność
Odporność
Język C++ dzisiaj
Porównanie C++ z innymi językami
Konkurencyjne języki i wydajność
Mechanizmy języka C++ niezwiązane z wydajnością
Wady języka C++
Biblioteki i kompilatory używane w tej książce
Podsumowanie
21
21
22
24
24
25
25
25
27
33
33
34
Kup książkę
Poleć książkę
Spis treści
Rozdział 2. Podstawowe techniki języka C++
Automatyczne wykrywanie typów za pomocą słowa kluczowego auto
Stosowanie słowa kluczowego auto w sygnaturach funkcji
Stosowanie słowa kluczowego auto dla zmiennych
Semantyka przenoszenia
Tworzenie przez kopiowanie, wymienianie i przenoszenie
Pozyskiwanie zasobów i reguła pięciu
Zmienne nazwane i r-wartości
Domyślna semantyka przenoszenia i reguła zera
Stosowanie modyfikatora && do funkcji składowych klas
Nie przenoś obiektów, jeśli kopiowanie i tak jest pomijane
Jeśli to możliwe, stosuj przekazywanie przez wartość
Projektowanie interfejsów z obsługą błędów
Kontrakty
Obsługa błędów
Obiekty funkcyjne i wyrażenia lambda
Podstawowa składnia lambd w języku C++
Klauzula przechwytywania
Przypisywanie do lambd wskaźników do funkcji języka C
Typy lambd
Lambdy i typ std::function
Generyczne lambdy
Podsumowanie
35
36
36
38
41
42
44
47
48
52
52
53
55
56
60
66
66
67
73
73
73
77
78
Rozdział 3. Analizowanie i pomiar wydajności
Złożoność asymptotyczna i notacja dużego O
Tempo wzrostu
Zamortyzowana złożoność czasowa
Co mierzyć i w jaki sposób?
Aspekty wydajności
Przyspieszanie wykonywania kodu
Liczniki wydajności
Testy wydajności — dobre praktyki
Poznaj kod i znajdź hot spoty
Profilery z instrumentacją
Profilery z próbkowaniem
Mikrotesty
Prawo Amdahla
Pułapki związane z mikrotestami
Przykład ilustrujący mikrotesty
Podsumowanie
79
80
84
85
88
90
91
91
92
93
94
96
98
99
100
101
106
Rozdział 4. Struktury danych
Cechy pamięci w komputerach
Kontenery z biblioteki standardowej
Kontenery sekwencyjne
Kontenery asocjacyjne
Adaptery kontenerów
4
107
107
111
112
117
121
Kup książkę
Poleć książkę
Spis treści
Używanie widoków
Unikanie kopiowania dzięki typowi string_view
Unikanie utraty informacji o długości tablic dzięki typowi std::span
Uwagi na temat wydajności
Zapewnianie równowagi między gwarancjami złożoności
a dodatkowymi kosztami
Znajomość i stosowanie odpowiednich funkcji API
Tablice równoległe
Podsumowanie
123
124
125
126
126
127
129
135
Rozdział 5. Algorytmy
Wprowadzenie do algorytmów z biblioteki standardowej
Ewolucja algorytmów z biblioteki standardowej
Rozwiązywanie codziennych problemów
Iteratory i zakresy
Wprowadzenie do iteratorów
Wartość wartownika i iteratory zakońcowe
Zakresy
Kategorie iteratorów
Cechy algorytmów standardowych
Algorytmy nie zmieniają wielkości kontenera
Algorytmy zwracające dane wyjściowe wymagają zaalokowanych danych
Algorytmy domyślnie używają funkcji operator==() i operator<()
W algorytmach z ograniczeniami używane są projekcje
Algorytmy wymagają, aby operatory przenoszące nie zgłaszały wyjątków
Algorytmy mają gwarantowaną złożoność
Algorytmy działają równie dobrze jak analogiczne funkcje z bibliotek języka C
Pisanie i stosowanie algorytmów generycznych
Algorytmy niegeneryczne
Algorytmy generyczne
Struktury danych, które mogą być używane przez algorytmy generyczne
Dobre praktyki
Stosowanie algorytmów z ograniczeniami
Sortowanie tylko tych danych, które będą pobierane
Stosowanie algorytmów standardowych zamiast surowych pętli for
Unikanie tworzenia kopii kontenera
Podsumowanie
136
137
137
138
144
144
145
146
147
149
149
150
152
153
153
154
155
155
156
156
157
159
159
159
162
168
169
Rozdział 6. Zakresy i widoki
Powody powstania biblioteki Ranges
Ograniczenia biblioteki Algorithm
Widoki z biblioteki Ranges
Widoki można
łączyć
w
łańcuch
Widoki zakresów i adaptery zakresów
Widoki są zakresami bez własności elementów
oferującymi gwarancje złożoności
Widoki nie modyfikują podstawowego kontenera
Widoki można materializować do postaci kontenerów
Widoki są przetwarzane leniwie
5
170
170
171
173
174
175
176
176
177
178
Kup książkę
Poleć książkę
Zgłoś jeśli naruszono regulamin