Ссылки на тему особенности реализации классов библиотеки STL и других библиотек контейнеров.
Основные источники вдохновения, когда стандартных контейнеров STL не хватает: EASTL
, LLVM containers
, Folly
, Boost
.
EA Standard Template Library - альтернативная стандартная библиотека от Electonics Arts, появившаяся ещё тогда, когда стандартные реализации были сомнительного качества и развивающаяся и сейчас.
EASTL — Electronic Arts Standard Template Library - описание классов, отличий от STL и принципов дизайна.
EASTL Best Practices - сборник советов, как пользоваться.
LLVM Data-structures overview - доклад Marcello Maggioni о структурах данных, используемых в LLVM.
LLVM Programmer’s Manual - более детальное описание
Folly - набор библиотек Facebook.
CppCon 2016: Nicholas Ormrod “The strange details of std::string at Facebook” - доклад про реализию folly::String
Boost - документация к библиотекам буст.
Многое из полезных буст библиотек уже и так в STL (нужно быть очень благодарным авторам Boost за это).
Optimizing using an exotic associative container - Boost flat_map to the rescue
Zmeya - библиотека stl-like контейнеров для быстрой сериализации.
Benchmark of major hash maps implementations - бенчмарк реализаций хеш-таблиц.
Stlab - стандартные библиотеки Adobe, расширяющие функционал STL. Подход немного отличается от стандартного ООП в сторону Value Oriented Programming, много материалов на странице Шона Пэрента, с отсылками к Александру Степанову. Подход периодически разбирается на конференциях, пример - Keynote: SOLID, Revisited - Tony Van Eerd - [CppNow 2021]
Доклад The Performance Price of Dynamic Memory in C++ - Ivica Bogosavljevic
про различные аспекты оптимизации, часто ссылается на статьи из своего блога:
Process polymorphic classes in lightning speed - статья со сравнением скорости обработки полиморфных объектов. Почти все статьи в блоге посвящены оптимизации, часто касаются структур данных и контейнеров из STL.
Polymorphic Vector - класс для обработки вариантов полиморфных объектов.
stack_alloc - простая реализация кастомного аллокатора для STL-контейнеров.
Intrusive hash - быстрые хеш-таблицы.
C++ Performance: Common Wisdoms and Common “Wisdoms” - много советов про выбор STL
и EASTL
контейнеров.
Classes With Many Fields - Stanisław J. Dobrowolski - по таймингу ссылки на решения для сокращения объема классов в в проектах - Chromium, Firefox, LLVM, VLC, GZDoom.
CPP Optimizations Diary - блог со статьями по оптимизации C++-кода.
Do you actually need to use std::map? - сравнение производительности поиска в std::map
и std::vector<std::pair<KeyType, ValueType>>
.
Shahar’s C++ posts - серия постов Shahar Mike с разбором реализации некоторых STL-классов.
Книги
Scott Meyers books - суперполезная серия Effective
, включая немного устаревшую Effective STL
(лучше читать с пониманием, что изменилось в C++11/14/17).
More C++ Idioms - Набор полезных материалов и ссылок с объяснениями идиом C++, в том числе используемых в библиотеках STL
и Boost
.