reklama - zainteresowany?

Efektywne zarz - Helion

Efektywne zarz
ebook
Autor: Patrice Roy
Tytuł oryginału: C++ Memory Management: Write leaner and safer C++ code using proven memory-management techniques
Tłumaczenie: Robert G
ISBN: 978-83-289-3324-8
stron: 392, Format: ebook
Data wydania: 2026-04-01
Księgarnia: Helion

Cena książki: 44,50 zł (poprzednio: 89,00 zł)
Oszczędzasz: 50% (-44,50 zł)

Dodaj do koszyka Efektywne zarz

Tagi: C++ - Programowanie

Zarz

Dodaj do koszyka Efektywne zarz

Dodaj do koszyka Efektywne zarz

Spis treści

Efektywne zarządzanie pamięcią w C++. Praktyczne strategie i techniki tworzenia lekkiego, bezpiecznego i niezawodnego oprogramowania eBook -- spis treści

O autorze

O korektorach merytorycznych

Wprowadzenie

Przedmowa

Wprowadzenie

Część 1. Pamięć w C++

  • Rozdział 1. Obiekty, wskaźniki i referencje
    • Wymagania techniczne
    • Reprezentacja pamięci w C++
      • Obiekty, wskaźniki i referencje
    • Zrozumienie podstawowych właściwości obiektów
      • Cykl życiowy obiektu
      • Wielkość obiektu, jego wyrównanie i wypełnienie
      • Kopiowanie i przenoszenie
    • Tablice
    • Podsumowanie
  • Rozdział 2. Na co należy uważać?
    • Różne rodzaje zła
      • Źle sformułowany kod, bez wymaganej diagnostyki
      • Niezdefiniowane zachowanie
      • Zachowanie definiowane przez implementację
      • Nieokreślone zachowanie (niezdefiniowane w dokumentacji)
      • Zasada jednej definicji
      • Błędne zachowanie
    • Wskaźniki
      • Zastosowania arytmetyki wskaźników w tablicach
      • Wymienialność wskaźników
      • Wykorzystanie arytmetyki wskaźników wewnątrz obiektu
    • Manipulowanie typami
      • Manipulacja typami poprzez elementy składowe unii
      • Typy intptr_t i uintptr_t
      • Funkcja std::memcpy()
      • Szczególne przypadki char*, unsigned char* i std::byte*
      • Funkcja std::start_lifetime_as<T>()
    • Podsumowanie
  • Rozdział 3. Rzutowanie i kwalifikatory cv
    • Wymagania techniczne
    • Czym jest rzutowanie?
    • Bezpieczeństwo w systemie typów - kwalifikatory cv
    • Rzutowania w C++
      • Twój najlepszy przyjaciel (w większości przypadków) - static_cast
      • Sygnał, że coś jest nie tak - dynamic_cast
      • Igranie z bezpieczeństwem - const_cast
      • "Uwierz mi, kompilatorze" - reinterpret_cast
      • Wiem, że bity są poprawne - bit_cast
      • Nieco niezwiązane, ale warte wspomnienia - duration_cast
      • Znienawidzone rzutowanie w stylu C
    • Podsumowanie

Część 2. Techniki niejawnego zarządzania pamięcią

  • Rozdział 4. Korzystanie z destruktorów
    • Wymagania techniczne
    • Destruktory - krótkie podsumowanie
    • Zarządzanie zasobami
      • Obsługa wyjątków. czy może nie?
    • Idiom RAII
      • RAII i specjalne funkcje składowe C++
    • Potencjalne pułapki
      • Destruktory nie powinny zgłaszać wyjątków
      • Poznaj kolejność niszczenia obiektów
    • Standardowe narzędzia do automatyzacji zarządzania zasobami
      • unique_ptr<T> i shared_ptr<T>
      • lock_guard i scoped_lock
      • Obiekty strumieniowe
      • vector<T> i inne kontenery
    • Podsumowanie
  • Rozdział 5. Korzystanie ze standardowych inteligentnych wskaźników
    • Wymagania techniczne
    • Standardowe inteligentne wskaźniki
      • O wyrażaniu intencji poprzez sygnatury funkcji
    • Typ unique_ptr
      • Obsługa obiektów
      • Obsługa tablic
      • Niestandardowe funkcje usuwające
      • make_unique
    • Typy shared_ptr i weak_ptr
      • Użyteczność i koszty
      • make_shared()
      • A co z weak_ptr?
    • Kiedy stosować nieprzetworzone wskaźniki?
    • Podsumowanie
  • Rozdział 6. Implementowanie inteligentnych wskaźników
    • Wymagania techniczne
    • Semantyka własności
    • Implementacja własnej wersji unique_ptr
      • Sygnatura typu
      • Specjalne funkcje składowe
      • Funkcje przypominające wskaźniki
    • Implementacja własnej, prostej wersji inteligentnego wskaźnika shared_ptr
      • Kilka słów o funkcji make_shared()
    • Implementacja wskaźnika powielającego opartego na polityce
      • Wykrywanie za pomocą interfejsów
      • Wykrywanie za pomocą cech
      • Wykrywanie za pomocą konceptów
    • Kilka prostych, ale wciąż przydatnych inteligentnych wskaźników
      • Wskaźnik non_null_ptr
      • Typ observer_ptr
    • Podsumowanie

Część 3. Przejmowanie kontroli (nad mechanizmami zarządzania pamięcią)

  • Rozdział 7. Przeciążanie operatorów alokacji pamięci
    • Dlaczego warto przeciążać funkcje alokacji pamięci?
    • Krótki przegląd funkcji alokacji pamięci w języku C
    • Przegląd funkcji alokacji pamięci w C++
      • Globalne funkcje alokacji
      • Funkcje alokacji, które nie zgłaszają wyjątków
      • Najważniejsza funkcjonalność operator new - mechanizm placement new
      • Funkcje alokacji dla elementów składowych
      • Funkcje alokacji, które uwzględniają wyrównanie
      • Niszcząca funkcja delete
    • Podsumowanie
  • Rozdział 8. Implementacja prostego detektora wycieków pamięci
    • Wymagania techniczne
    • Plan
    • Pierwsze podejście (które prawie działa)
      • Klasa singleton Accountant
      • Implementacja funkcji operator new i new[]
      • Implementacja funkcji operator delete i delete[]
      • Wizualizacja całości
    • Wyszukiwanie (i rozwiązywanie) problemów
    • Powrót do naszej implementacji (i wyciągnięcie wniosków)
    • Podsumowanie
  • Rozdział 9. Nietypowe mechanizmy alokacji
    • Wymagania techniczne
    • Mechanizm placement new i sprzęt mapowany w pamięci
    • Uproszczenie użycia wersji nothrow funkcji operator new
    • Brak pamięci i funkcja new_handler
    • Standardowy C++ a nietypowe zarządzanie pamięcią
      • Fikcyjne API pamięci współdzielonej
      • Przykład kodu użytkownika
      • Standardowo wyglądający odpowiednik kodu użytkownika
    • Podsumowanie
  • Rozdział 10. Zarządzanie pamięcią oparte na pulach i inne optymalizacje
    • Wymagania techniczne
    • Zarządzanie pamięcią oparte na pulach
      • Konkretny przykład - implementacja oparta na wielkości
      • Uogólnienie do SizeBasedArena<T,N>
    • Gdy parametry ulegają zmianie
    • Pule fragmentowane
    • Podsumowanie
  • Rodział 11. Odroczone zwalnianie pamięci
    • Wymagania techniczne
    • Co oznacza odroczone zwalnianie pamięci?
    • Odzyskiwanie zasobów (bez finalizacji) pod koniec programu
    • Odzyskiwanie zasobów i finalizacja na końcu programu
    • Odzyskiwanie zasobów i finalizacja na końcu zasięgu
    • Podsumowanie

Część 4. Tworzenie kontenerów generycznych (i trochę więcej)

  • Rozdział 12. Tworzenie kontenerów generycznych z jawnym zarządzaniem pamięcią
    • Wymagania techniczne
    • Implementacja własnej alternatywy dla vector<T>
      • Wybór reprezentacji dla kontenera z ciągłymi elementami
      • Implementacja Vector<T>
    • Implementacja własnej alternatywy dla forward_list<T>
      • Wybór reprezentacji dla kontenera opartego na węzłach
      • Implementacja ForwardList<T>
    • Efektywniejsze zarządzanie pamięcią
      • Znacznie wydajniejszy typ Vector<T>
      • Korzystanie z niskopoziomowych narzędzi standardowych
      • Stałe składowe lub referencyjne a std::launder()
    • Podsumowanie
  • Rozdział 13. Tworzenie kontenerów generycznych z niejawnym zarządzaniem pamięcią
    • Wymagania techniczne
    • Dlaczego jawne zarządzanie pamięcią komplikuje naszą implementację?
    • Niejawne zarządzanie pamięcią za pomocą inteligentnego wskaźnika
      • Wpływ na prostą implementację Vector<T>
      • Wpływ na zaawansowaną implementację Vector<T>
    • Skutki przeprojektowania klasy
    • Uogólnienie do ForwardList<T>?
      • Próba zdefiniowania każdego węzła jako odpowiedzialnego za swojego następcę
      • Próba zdefiniowania wskaźnika head jako odpowiedzialnego za pozostałe węzły
    • Podsumowanie
  • Rozdział 14. Tworzenie kontenerów generycznych z obsługą alokatorów
    • Wymagania techniczne
    • Dlaczego alokatory?
    • Klasyczne alokatory
      • Przed C++11
      • Tradycyjne alokatory we współczesnych standardach
      • Zarządzanie tradycyjnym cyklem życiowym alokatora
      • Problemy z tradycyjnymi alokatorami
    • Polimorficzne alokatory zasobów pamięci
      • Zagnieżdżone alokatory
      • Alokatory i zbieranie danych
      • Zalety i koszty
    • Podsumowanie
  • Rozdział 15. Współczesne zagadnienia
    • Wymagania techniczne
    • Rozpoczynanie cyklu życiowego obiektu bez konstruktorów
    • Prosta relokacja
    • Funkcje alokacji i zwalniania pamięci, które znają typy
    • Podsumowanie

Dodatek. Co powinieneś wiedzieć?

  • struktury i klasy
  • std::size_t
  • Operator sizeof
  • Asercje
  • Niezdefiniowane zachowanie
  • Cechy typów
  • Cechy std::true_type i std::false_type
  • Cecha std::conditional<B,T,F>
  • Algorytmy
  • Funktory (obiekty funkcyjne) i wyrażenia lambda
  • Przyjaciele
  • Operator decltype
  • Idealne przekazywanie
  • Wzorzec projektowy singleton
    • Tworzenie egzemplarza podczas uruchamiania programu
    • Inicjalizacja w trakcie pierwszego wywołania
  • Funkcja std::exchange()

Dodaj do koszyka Efektywne zarz

Code, Publish & WebDesing by CATALIST.com.pl



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