reklama - zainteresowany?

Wysoce wydajny C++. Opanuj sztuk - Helion

Wysoce wydajny C++. Opanuj sztuk
ebook
Autor: Bjorn Andrist, Viktor Sehr
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-9709-5
stron: 448, Format: ebook
Księgarnia: Helion

Cena książki: 119,00 zł

Książka będzie dostępna od grudnia 2022

Tagi: C++ - Programowanie

Dzisiejszy C++ jest wyj

Spis treści

Wysoce wydajny C++. Opanuj sztukę optymalizowania działania kodu. Wydanie II eBook -- 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

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

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

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

Rozdział 4. Struktury danych

  • Cechy pamiÄ™ci w komputerach
  • Kontenery z biblioteki standardowej
    • Kontenery sekwencyjne
    • Kontenery asocjacyjne
    • Adaptery kontenerów
  • 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

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

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
  • Widoki z biblioteki standardowej
    • Widoki dla zakresów
    • Jeszcze o typach std::string_view i std::span
  • PrzyszÅ‚ość biblioteki Ranges
  • Podsumowanie

Rozdział 7. Zarządzanie pamięcią

  • Pamięć w komputerze
    • Wirtualna przestrzeÅ„ adresowa
    • Strony pamiÄ™ci
    • Migotanie
  • Pamięć procesu
    • Pamięć na stosie
    • Pamięć na stercie
  • Obiekty w pamiÄ™ci
    • Tworzenie i usuwanie obiektów
    • Wyrównanie pamiÄ™ci
    • DopeÅ‚nienie
  • WÅ‚asność pamiÄ™ci
    • PoÅ›rednie zarzÄ…dzanie zasobami
    • Kontenery
    • Inteligentne wskaźniki
  • Optymalizacja maÅ‚ych obiektów
  • Niestandardowe zarzÄ…dzanie pamiÄ™ciÄ…
    • Tworzenie puli pamiÄ™ci
    • Niestandardowy alokator pamiÄ™ci
    • Stosowanie polimorficznych alokatorów pamiÄ™ci
    • Implementowanie niestandardowego zasobu pamiÄ™ciowego
  • Podsumowanie

Rozdział 8. Programowanie z przetwarzaniem w czasie kompilacji

  • Wprowadzenie do metaprogramowania z użyciem szablonów
    • Tworzenie szablonów
    • Stosowanie liczb caÅ‚kowitych jako parametrów szablonu
    • Tworzenie specjalizacji szablonu
    • Jak kompilator przetwarza funkcjÄ™ szablonowÄ…?
    • Skrócone szablony funkcji
    • Pobieranie typu zmiennej za pomocÄ… specyfikatora decltype
  • Cechy typów
    • Kategorie cech typów
    • Stosowanie cech typów
  • Programowanie z użyciem staÅ‚ych wyrażeÅ„
    • DziaÅ‚anie funkcji ze sÅ‚owem kluczowym constexpr w czasie wykonywania programu
    • Deklarowanie funkcji natychmiastowych za pomocÄ… sÅ‚owa kluczowego consteval
    • Instrukcja if constexpr
    • Sprawdzanie bÅ‚Ä™dów programistycznych w czasie kompilacji
  • Ograniczenia i koncepty
    • Szablon Point2D bez ograniczeÅ„
    • Omówienie skÅ‚adni ograniczeÅ„ i konceptów
    • Wersja szablonu Point2D z ograniczeniami
    • Dodawanie ograniczeÅ„ do kodu
    • Koncepty w bibliotece standardowej
  • Praktyczne przykÅ‚ady metaprogramowania
    • PrzykÅ‚ad nr 1: tworzenie generycznej bezpiecznej funkcji rzutowania
    • PrzykÅ‚ad nr 2: obliczanie skrótów Å‚aÅ„cuchów znaków w czasie kompilacji
  • Podsumowanie

Rozdział 9. Podstawowe narzędzia

  • Reprezentowanie wartoÅ›ci opcjonalnych za pomocÄ… typu std::optional
    • Opcjonalne zwracane wartoÅ›ci
    • Opcjonalne zmienne skÅ‚adowe
    • Unikanie pustych stanów w wyliczeniach
    • Sortowanie i porównywanie wartoÅ›ci typu std::optional
  • Kolekcje niejednorodne o staÅ‚ej wielkoÅ›ci
    • Stosowanie typu std::pair
    • Typ std::tuple
  • Kolekcje niejednorodne o dynamicznie zmienianej wielkoÅ›ci
    • Typ std::variant
    • Kolekcje niejednorodne z obiektami typu std::variant
    • DostÄ™p do wartoÅ›ci z kontenera elementów typu VariantType
  • Praktyczne przykÅ‚ady
    • PrzykÅ‚ad nr 1: projekcje i operatory porównania
    • PrzykÅ‚ad nr 2: refleksja
  • Podsumowanie

Rozdział 10. Obiekty pośredniczące i leniwe przetwarzanie

  • Wprowadzenie do leniwego przetwarzania i obiektów poÅ›redniczÄ…cych
    • Przetwarzanie leniwe i przetwarzanie zachÅ‚anne
    • Obiekty poÅ›redniczÄ…ce
  • Stosowanie obiektów poÅ›redniczÄ…cych do zapobiegania tworzeniu obiektów
    • Porównywanie scalanych Å‚aÅ„cuchów znaków z wykorzystaniem obiektu poÅ›redniczÄ…cego
    • Implementowanie obiektu poÅ›redniczÄ…cego
    • Modyfikator r-wartoÅ›ci
    • Przypisywanie poÅ‚Ä…czonej wartoÅ›ci do obiektu poÅ›redniczÄ…cego
    • Ocena wydajnoÅ›ci
  • Odraczanie obliczania kwadratów
    • Prosta klasa reprezentujÄ…ca wektory dwuwymiarowe
    • Obliczenia matematyczne
    • Implementowanie klasy LengthProxy
    • Porównywanie dÅ‚ugoÅ›ci za pomocÄ… klasy LengthProxy
    • Obliczanie dÅ‚ugoÅ›ci za pomocÄ… klasy LengthProxy
    • Ocena wydajnoÅ›ci
  • PomysÅ‚owe przeciążanie operatorów i obiekty poÅ›redniczÄ…ce
    • Operator potoku jako metoda rozszerzajÄ…ca
  • Podsumowanie

RozdziaÅ‚ 11. WspóÅ‚bieżność

  • Podstawy wspóÅ‚bieżnoÅ›ci
  • Co sprawia, że programowanie wspóÅ‚bieżne jest trudne?
  • WspóÅ‚bieżność a równolegÅ‚ość
    • Porcjowanie czasu
    • WspóÅ‚dzielona pamięć
    • Sytuacja wyÅ›cigu
    • Muteks
    • Zakleszczenie
    • Zadania synchroniczne i zadania asynchroniczne
  • Programowanie wspóÅ‚bieżne w jÄ™zyku C++
    • Biblioteka obsÅ‚ugi wÄ…tków
    • Dodatkowe podstawowe mechanizmy synchronizacji w standardzie C++20
    • ObsÅ‚uga zmiennych atomowych w jÄ™zyku C++
    • Model dostÄ™pu do pamiÄ™ci w jÄ™zyku C++
  • Programowanie bez blokad
    • PrzykÅ‚ad: kolejka bez blokad
  • Wskazówki dotyczÄ…ce wydajnoÅ›ci
    • Zapobieganie rywalizacji
    • Unikanie operacji blokujÄ…cych
    • Liczba wÄ…tków i rdzeni procesora
    • Priorytety wÄ…tków
    • Koligacja wÄ…tków
    • Niezamierzone wspóÅ‚dzielenie
  • Podsumowanie

Rozdział 12. Korutyny i leniwe generatory

  • Kilka przykÅ‚adów uzasadniajÄ…cych stosowanie korutyn
  • Abstrakcja reprezentujÄ…ca korutyny
    • Podprocedury i korutyny
    • Wykonywanie podprocedur i korutyn w procesorze
    • Korutyny bezstosowe i korutyny stosowe
    • Czego Czytelnik nauczyÅ‚ siÄ™ do tego miejsca?
  • Korutyny w jÄ™zyku C++
    • Co zostaÅ‚o uwzglÄ™dnione w standardzie jÄ™zyka C++ (i co zostaÅ‚o pominiÄ™te)?
    • Co sprawia, że funkcja w jÄ™zyku C++ jest korutynÄ…?
    • Minimalny, lecz kompletny przykÅ‚ad
    • Alokowanie stanu korutyny
    • Zapobieganie wiszÄ…cym referencjom
    • ObsÅ‚uga bÅ‚Ä™dów
    • Punkty konfiguracyjne
  • Generatory
    • Implementowanie generatora
    • Stosowanie klasy Generator
    • Praktyczny przykÅ‚ad zastosowania generatorów
  • Wydajność
  • Podsumowanie

Rozdział 13. Programowanie asynchroniczne z użyciem korutyn

  • Jeszcze o typach awaitable
    • Automatyczne punkty wstrzymywania
  • Implementowanie prostego typu reprezentujÄ…cego zadanie
    • ObsÅ‚uga zwracanych wartoÅ›ci i wyjÄ…tków
    • Wznawianie oczekujÄ…cej korutyny
    • Dodawanie obsÅ‚ugi zadaÅ„ zwracajÄ…cych void
    • Synchroniczne oczekiwanie na ukoÅ„czenie zadania
    • Testowanie asynchronicznych zadaÅ„ z użyciem funkcji sync_wait()
  • Tworzenie nakÅ‚adki na API opartym na wywoÅ‚aniach zwrotnych
  • WspóÅ‚bieżny serwer zbudowany za pomocÄ… biblioteki Boost.Asio
    • Implementowanie serwera
    • Uruchamianie serwera i nawiÄ…zywanie z nim poÅ‚Ä…czenia
    • Co osiÄ…gnÄ™liÅ›my za pomocÄ… serwera (i czego wciąż brakuje)?
  • Podsumowanie

RozdziaÅ‚ 14. Algorytmy równolegÅ‚e

  • Znaczenie równolegÅ‚oÅ›ci
  • Algorytmy równolegÅ‚e
    • Ocena algorytmów równolegÅ‚ych
    • Jeszcze o prawie Amdahla
    • Implementowanie równolegÅ‚ego algorytmu std::transform()
    • Implementowanie równolegÅ‚ej wersji algorytmu std::count_if()
    • Implementowanie równolegÅ‚ej wersji algorytmu std::copy_if()
  • Algorytmy równolegÅ‚e z biblioteki standardowej
    • Strategie wykonywania
    • ObsÅ‚uga wyjÄ…tków
    • Dodatki i zmiany w algorytmach równolegÅ‚ych
    • Zrównoleglanie pÄ™tli for opartej na indeksie
  • Wykonywanie algorytmów w procesorze graficznym
  • Podsumowanie

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.