
Лямбды в C++: как захват и std::function бьют по производительности
Разбор захвата, времени жизни и стирания типа в лямбдах C++. Где скрытая аллокация, где висячая ссылка и почему std::function в горячем цикле стоит вам процентов производительности.

Разбор захвата, времени жизни и стирания типа в лямбдах C++. Где скрытая аллокация, где висячая ссылка и почему std::function в горячем цикле стоит вам процентов производительности.

Ручной цикл for с индексом переписывают на std::ranges не ради моды, а потому что он молча ломается на пустых контейнерах и off-by-one. Разбираем, какие алгоритмы STL экономят время, а какие тянут за собой сюрпризы.

vector, list, map, unordered_map — четыре контейнера, между которыми чаще всего мечется код. Чек-лист по итерациям, инвалидации и реальной стоимости операций, чтобы выбор не превратился в 200 мс на ровном месте.

std::move не перемещает, а объект после перемещения не всегда пустой. Разбираем частые ошибки с move-семантикой в C++11–C++20 и что с ними делать.

unique_ptr, shared_ptr и weak_ptr решают разные задачи, а не «то же самое, только безопаснее». Разбираем, где каждый уместен, что стоит подсчёт ссылок и как не поймать цикл, из-за которого память не освободится.

Синхронный лог с std::endl и потоками может стоить сервису тысячи операций в секунду. Разбираем, где C++-логгер теряет время и как форматирование влияет на латентность горячего пути.

Разбор трёх рабочих способов вызвать C++ из Python и Go: pybind11, ctypes и cgo. Где утечёт память, где упадёт GIL и почему копирование буфера съест весь выигрыш от нативного кода.

GIL, владение памятью и разные ABI ломают связку C++ с Python и Go тише, чем падение сегфолтом. Разбираем, где именно теряются данные и производительность и что с этим делать.

На микроконтроллере с 64 КБ RAM исключения, RTTI и куча превращаются из удобства в источник проблем. Разбираем, что отключать, чем заменять и почему статическое размещение объектов надёжнее new.

Вызов C-функции из Go стоит десятки-сотни наносекунд накладных расходов на каждый переход границы. Разбираем, откуда берётся эта цена, как её измерить и в каких случаях cgo действительно нужен.

Как связать два процесса на C++ и не выстрелить себе в ногу: разделяемая память, POSIX-очереди, локальные сокеты и pipe. С ценой каждого подхода и типичными граблями.

Компилятор C++ выдаёт полотно текста на одну забытую точку с запятой. Учимся находить первую настоящую ошибку и понимать, что от вас хочет g++ или clang.