
Обработка изображений в C++: OpenCV, stb, ImageMagick
Загрузить, изменить размер, наложить фильтр — задача одна, а библиотек под неё три класса. Разбираем OpenCV, stb_image, CImg и ImageMagick по весу, скорости сборки и порогу входа.

Загрузить, изменить размер, наложить фильтр — задача одна, а библиотек под неё три класса. Разбираем OpenCV, stb_image, CImg и ImageMagick по весу, скорости сборки и порогу входа.

Разбираем, когда хватит сырых POSIX-сокетов, когда нужен Boost.Asio, а когда — libuv или standalone Asio. С ценой каждого подхода в строках кода, зависимостях и скорости разработки.

Наивный парсер на std::stringstream разбирает 500 МБ лога десятки секунд и открывает дорогу переполнениям. Разбираем, где C++-код теряет скорость и как не выйти за границы буфера.

Один и тот же файл на 1 ГБ читается в C++ пятью способами, и разница по скорости доходит до порядка. Разбираем, чем платишь за каждый вариант и когда какой оправдан.

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

Тест зелёный, а в проде сегфолт раз в сутки. Разбираем, как ASan, UBSan и TSan ловят то, что не видит компилятор, и чем платят за это по памяти и скорости.

using namespace в заголовке, конфликты имён из-за ADL, версионирование через inline namespace — разбираем, как организовать пространства имён так, чтобы код не разваливался на большом проекте.

Три ключевых слова про неизменяемость и вычисления на этапе компиляции легко путают. Разбираем, чем они отличаются, где каждое ломается и что реально считается до запуска программы.

Где живут ваши объекты, почему new дороже автоматической переменной и как выравнивание съедает память в структурах. Разбираем на конкретных размерах и замерах.

std::async кажется простейшим способом запустить задачу в фоне, но у него есть три ловушки: скрытая политика запуска, блокирующий деструктор future и отсутствие пула потоков. Разбираем, где это стреляет.

Гонка данных даёт неверный результат раз в тысячу запусков и не ловится отладчиком. Разбираем std::thread, mutex и atomic: чем платишь за каждый и когда какой выбрать.

Исключения в C++ бесплатны на счастливом пути и дороги на пути ошибки. Разбираем, где они уместны, где вредят, и как не сломать инварианты при их распространении.