// архитектура C++ · производительность · встраиваемые

Глубокое погружение в
современный C++

Паттерны, техники оптимизации и встраиваемые системы для инженеров, которым важны детали.

architecture 02 Sep 2024 7 мин. чтения

Проектирование на основе политик — сборка поведения во время компиляции

Классы политик в стиле Александреску: компонуйте поведение из взаимозаменяемых политик времени компиляции вместо переключателей времени выполнения. Нулевые накладные расходы, никакого виртуального вызова, неограниченная настраиваемость.

#templates#policy#crtp#c++20#metaprogramming
types-data 26 Aug 2024 6 мин. чтения

Шаблонное метапрограммирование и концепты C++20

От SFINAE до концептов: как ограничивать шаблоны, писать трейты типов и задавать контракты времени компиляции. Практические паттерны C++17 и C++20 без академической теории.

#templates#concepts#c++20#c++17#metaprogramming
architecture 19 Aug 2024 6 мин. чтения

Стирание типов без виртуальных функций — внутренности std::function и самодельный вариант

Как работает стирание типов в C++. Внутренности std::function, std::any, самодельное стирание типов с буфером хранения — когда каждый подход стоит своей сложности.

#templates#vtable#type-erasure#c++17#performance
snippets 29 Jul 2024 5 мин. чтения

Примеры CRTP-примесей

Готовые к использованию CRTP-примеси: логирование, включение/отключение, сравнение, вывод, подсчёт экземпляров. Добавляйте в любой класс без виртуальной диспетчеризации.

#crtp#mixins#templates#patterns#c++
смотреть все →
architecture 02 Sep 2024 7 мин. чтения

Проектирование на основе политик — сборка поведения во время компиляции

Классы политик в стиле Александреску: компонуйте поведение из взаимозаменяемых политик времени компиляции вместо переключателей времени выполнения. Нулевые накладные расходы, никакого виртуального вызова, неограниченная настраиваемость.

#templates#policy#crtp#c++20#metaprogramming
architecture 19 Aug 2024 6 мин. чтения

Стирание типов без виртуальных функций — внутренности std::function и самодельный вариант

Как работает стирание типов в C++. Внутренности std::function, std::any, самодельное стирание типов с буфером хранения — когда каждый подход стоит своей сложности.

#templates#vtable#type-erasure#c++17#performance
performance 15 Jul 2024 6 мин. чтения

Профилирование с perf и valgrind — чтение вывода

Практическое руководство по perf и valgrind: что измеряет каждый инструмент, какие команды запускать и как читать вывод для поиска реальных узких мест производительности.

#profiling#perf#valgrind#performance#optimization
performance 29 Apr 2024 7 мин. чтения

Распределители памяти: пул, арена и избежание фрагментации

Почему стандартная куча ломает встраиваемые прошивки и высокопроизводительные серверы. Пул-аллокаторы, аллокаторы-арены и стековые аллокаторы — реализация, компромиссы и применение.

#allocators#memory#embedded#performance#heap
embedded 08 Apr 2024 5 мин. чтения

HAL vs прямой доступ к регистрам на STM32

Когда HAL STM32 — правильный выбор, когда доступ к регистрам его превосходит, и как смешать оба подхода в многоуровневой архитектуре прошивки без создания хаоса.

#stm32#hal#bare-metal#embedded#firmware
snippets 29 Jul 2024 5 мин. чтения

Примеры CRTP-примесей

Готовые к использованию CRTP-примеси: логирование, включение/отключение, сравнение, вывод, подсчёт экземпляров. Добавляйте в любой класс без виртуальной диспетчеризации.

#crtp#mixins#templates#patterns#c++
snippets 08 Jul 2024 5 мин. чтения

Пул объектов

Типобезопасный пул объектов фиксированной ёмкости для встраиваемых систем и систем реального времени. O(1) выделение и освобождение, без фрагментации кучи, совместим с unique_ptr.

#allocators#embedded#performance#memory#patterns
snippets 06 May 2024 4 мин. чтения

Потокобезопасный синглтон — C++11 и новее

Единственная корректная реализация синглтона на C++11. Почему двойная проверка блокировки была сломана до C++11, почему работает сейчас и когда избегать синглтонов вообще.

#singleton#concurrency#c++11#patterns