IT Kniga
Интернет-магазин компьютерной литературы

C++ - habr.ru

RSS-материал Хабр
C++ – типизированный язык программирования
Обновлено: 5 часа 1 минута назад

Создание файлового сервера на c++ и Boost

Втр, 04/02/2025 - 13:29

В этой статье я описал процесс создания файлового сервера — инструмента для организации доступа к файлам по сети. В статье представлен пример реализации файлового сервера на C++ с использованием библиотеки Boost.Beast и Boost.Filesystem. Сервер позволяет просматривать содержимое указанной директории и поддиректорий, скачивать файлы.

Читать далее
Категории: C, C++

ffmpeg: сохраняем прогресс конвертации

Пнд, 03/02/2025 - 22:02

Многие из нас периодически сталкиваются с необходимостью конвертации видео: в другое разрешение, в другой формат или др.

Но у процесса конвертации есть нехорошая черта: он занимает много времени. Иногда очень много.

И вот когда длительность переваливает за десяток часов ... утилита конвертации не поддерживает функции останова и перезапуска ... становится немного неуютно.

Рассмотрим более реальную ситуацию: есть популярный пакет утилит ffmpeg для конвертации. Если поискать способы сохранения прогресса, чтобы после останова/крэша/сбоя продолжить конвертацию не с начала, а уже с какой-то точки сохранения, то ... не находим. Очевидно, что многие вещи можно обойти, облегчить, обыграть другими средствами. Но всё равно хочется восстановления.

Итак, если способа нет, то его нужно создать.

Вот в статье и описан способ, как для ffmpeg сохранить прогресс и продолжить работу с точки сохранения.

Создаём точки сохранения
Категории: C, C++

Солнечный коллектор для умеренного климата

Пнд, 03/02/2025 - 14:15

Данная статья планируется в двух частях. Первая часть — программирование и сборка контроллера, вторая часть — сборка и тестирование системы в целом. Понятно, что пасмурный февраль за окном не позволит проверить основной летний режим, и вообще не располагает к работе на бане (в смысле на крыше), но испытать сам контроллер с некоторой имитацией и допусками всё‑же можно. Для этого у нас есть холодильник и кастрюлька с кипятком. Но будем последовательными.

Представьте себе летний день. Вы смотрите в небо и не видите сферу Дайсона. Наше солнце щедро раздает свою энергию направо и налево (а ещё и вверх и вниз). Нерационально, надо собрать хоть немного. Пока ваш сосед поднимает на опоры огромную бочку, стоически заполняет её из шланга, также гордо сливает цветущую водорослями жидкость каждую осень — вы решили подружиться с солнцем ещё ближе и технологичней. Сегодня поговорим о разработке «переводчика» с солнечного на человеческий — контроллера для солнечного коллектора. Это устройство будет поддерживать оптимальную температуру воды для банного душа, используя солнечную энергию.

Внимание, температура везде будет указана в градусах Цельсия, чтобы не писать каждый раз.

Изначальными причинами были только хорошо аргументированные «лень ходить из бани в дом, чтобы помыться», «не хочу бочку выше головы», «хочу хороший душ в бане» и т. д. Чтобы читатели были в курсе — баня мобильная, режим работы — финская парная, но возможно поставить душевую кабину в предбаннике. Расстояние до дома метров 15, прокладывать дополнительную сеть ГВС экономически оказывается не выгодным.

Читать далее
Категории: C, C++

Свой Cheat Engine с нуля! Часть 1 — Получаем список процессов и модули в нем

Сб, 01/02/2025 - 18:46

Чтобы сформировать понимание, как происходит получение списка процессов, просто заглянем в исходники самого Cheat Engine.

Здесь у нас есть процедура GetProcessList, в которую мы подаем массив строк, в который она запишем нам имена и айди процессов.

Первое, на что обратим внимание - структура, куда записывается информация о процесе, в СЕ она выглядит так

Читать далее
Категории: C, C++

Создание бота для телеграмма на c++, используя библиотеку Boost

Сб, 01/02/2025 - 00:33

Создание Telegram-ботов обычно ассоциируется с Python , но C++ — это мощная альтернатива для тех, кто ценит производительность и контроль над ресурсами. Использовать мы будем библиотеку Boost для работы с https запросами.

Если нужен только проект то он есть на гитхабе https://github.com/sergey00010/telegram_bot_cpp_boost

Читать далее
Категории: C, C++

PPSSPP или всё же psp? Смотрим баги в коде из прошлого

Пт, 31/01/2025 - 09:13

В мире видеоигр эмуляторы стали настоящей находкой для поклонников классических проектов. PPSSPP — один из самых популярных эмуляторов для PlayStation Portable (PSP), который позволяет нам вновь окунуться в атмосферу любимых игр, но уже на современных устройствах. Однако чтобы играть без сбоев и лагов, нужно убедиться, что код эмулятора хорошо написан.

Читать далее
Категории: C, C++

Безопасная работа с итераторами в С++

Чт, 30/01/2025 - 19:24


После публикации предыдущей статьи на данную тему, некоторые читатели не обратили внимания, что данный проект, это не действующий инструмент, готовый для боевого применения в реальных проектах, а только доказательство работоспособости концепции использования плагинов компилятора для дополнительного семантического контроля исходного кода С++ во время компиляции. А в качестве примера реализации подобного плагина я взял концепцию безопасной работы с памятью из языка NewLang с минимальной адаптацией под C++.


То есть основная идея предыдущей статьи — продемонстрировать возможность использования плагина компилятора для дополнительного анализатора исходного текста, а не изучение функциональности реализованной библиотеки для работы с памятью (которая и не может быть в полном объеме портирована на С++ из-за архитектурных различий в этих языках программирования).


Тем не мене, большинство читателей все же уловило основную мысль и проявило интерес к возможному дальнейшему развитию подобного подхода к повышению безопасной разработки на С++ без нарушения обратной совместимости со старым кодом. Поэтому, чтобы не смущать читателей отсылкой к неизвестному для них новому языку, я начал адаптировать концепцию безопасной работы с памятью под чистый С++ для решения специфических для С++ проблем.


А пока идет доработка плагина и мне очень захотелось поделиться одним очень увлекательным квестом, которой показывает непреодолимые архитертурыне проблемы С++ на пути к безопасному программирования. И поводом для того стали итераторы.

Читать дальше →
Категории: C, C++

Game++. Dancing with allocators

Чт, 30/01/2025 - 17:46

C и C++ не имеют встроенной сборки мусора, поэтому разработчик сам решает, как и когда выделять и освобождать память. Мы, конечно, можем покивать в сторону STL, сокрытия аллокаций в контейнерах, но от этого они никуда не денутся. Просто если раньше приходилось думать про выделенный кусок памяти, понимать, как он скажется на времени фрейма, помнить, что его надо удалить (а может, не надо и стоит оставить на следующий фрейм), то теперь всё заворачивается в сахарные контейнеры и разработку в стиле STL-blin-vse-sterpit. STL-то может и стерпит, и даже как-то будет ворочаться, однако не стоит полагаться исключительно на системный аллокатор, бездумно вызывая new или malloc для каждого запроса памяти. Вы ведь понимаете, что std::vector посреди цикла или горячей функции — это плохая идея?

Кроме того, такая практика приводит к ожидаемым проблемам с производительностью даже в обычных приложениях, чего уж говорить про высоконагруженные системы или игры, которые претендуют на что-то быстрее 20 фреймов в секунду.

Пытаться оптимизировать код, который использует системные аллокаторы, — всё равно что сгребать листья в кучу ветреным днём: куча, конечно, сгребается, но постоянно приходится махать грабельками, чтобы она оставалась на одном месте. Даже если выделения памяти происходят последовательно, друг за другом, вот прям без всяких перерывов, нет гарантии, что эти участки будут расположены хотя бы близко друг к другу. В результате при обработке таких данных процессору приходится прыгать по разным участкам памяти, теряя такты просто на поиск данных вместо того, чтобы работать с ними.

Я отнюдь не призываю вас встать на путь ручного управления памятью, ибо он будет усеян ловушками, граблями и чреват утечками. Но разработчик в итоге оказывается перед выбором: либо довериться системному аллокатору и столкнуться с проблемами вроде размазанного перфа, когда вроде и код написан правильно, модно и молодежно, но отчего-то работает небыстро, либо взять всё в свои руки, создавая собственные механизмы выделения и освобождения ресурсов.

Ребята из HFT, Database, Automotive и Embedded-систем наверняка могут рассказать немало интересных историй про оптимизацию new/delete. Давайте я расскажу немного про разные аллокаторы в играх?

Аллокатор аллокатору аллокации аллоцировал
Категории: C, C++

Динамическая рефлексия для C++

Чт, 30/01/2025 - 17:16

Всем привет

Меня всегда интересовала тема рефлексии в языках программирования, и то, какие программы можно создавать с ее помощью. Рефлексия — это мощный инструмент, позволяющий работать с программой не как с набором логических объектов (в случае использования ООП), а как с набором свойств и методов из которых они состоят. Такой подход дает возможность создавать алгоритмы, которые могут работать с любыми типами данных, для которых включена поддержка рефлексии.

Читать далее
Категории: C, C++

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 05 — GDI рендер

Ср, 29/01/2025 - 12:05

Приветствую, Хабравчане!

В данной статье опишу реализацию GDI рендера для Windows. Узнаем как программировали деды под windows в середине 1990-ых. И наконец создадим функциональный рендер, с возможностью рисовать все типы изображений.

Loading, please wait
Категории: C, C++

Разбираемся с библиотекой libnl для управления трафиком в Linux

Ср, 29/01/2025 - 07:16

В статье рассмотрим как реализовать команды утилиты traffic control  с помощью библиотеки libnl на с/c++. У libnl есть неплохая документация так же есть небольшое количество тестов. Которые помогают разобраться как работать с библиотекой.

Читать далее
Категории: C, C++

Сборка проектов Си и Си++: от простого к сложному. Часть I. Библиотеки

Втр, 28/01/2025 - 13:01

Каждый раз, в течение многих лет, собирая пилотную версию мизерного проекта или простой утилиты, мне кажется, что уж в этот раз точно обойдусь обычным скриптом для сборки, и никакие сборщики проекта мне не понадобятся. Но суровая реальность приводит меня в чувство уже в течение первых нескольких минут работы. Сначала оказывается, что до невозможности простая программка нуждается в JSON-парсере, HTTP-запросах CURL и прочих библиотеках. А по мере возбуждения хотелок эти все зависимости нарастают как снежный ком. И все мечты быстро скомпилировать страничку кода встречают на каждом шаге всё новые и новые проблемы.

Вот сегодня и расскажу о том, какие бывают способы борьбы с зависимостями и сборки проекта из множества файлов на Си++. Заодно те, кто не любят Си++, смогут порадоваться «прелестям» этого процесса. И хоть тема очень важная для программистов, но я обратил внимание, что даже многолетний опыт не гарантирует понимания этих процессов. Но сразу предупреждаю — история длинная даже с учетом всех попыток не убегать на смежные темы. Читать дальше →
Категории: C, C++

Путеводитель C++ программиста по неопределённому поведению

Втр, 28/01/2025 - 10:58


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

Читать дальше →
Категории: C, C++

Сложность концепции компоновки на примере для QT (шпаргалка)

Втр, 28/01/2025 - 09:35

Описания компоновки (управления автоматическим размещением визуальных элементов) которые мне попадались на родном языке мне кажутся не достаточно погружают читателя в реальную проблематику которая стоит за этим процессом. Мне хочется акцентировать внимание на том откуда берется сложность в этом вопросе. Хотелось бы чтобы кто-то покритиковал мои формулировки.

Читать далее
Категории: C, C++

Современные техники оптимизации производительности в C++. Кэш-локальность, аллокаторы и параллелизм

Пнд, 27/01/2025 - 11:15

Как создать быстрый код на C++? Мы будем разбираться в современных техниках оптимизации: кэш-локальности, кастомных аллокаторах и многопоточности. Практические примеры и результаты тестов.

Читать далее
Категории: C, C++

Отчет о проекте эффективного приоритетного дерева SAPT

Пнд, 27/01/2025 - 08:15

Отчет о, написанном мною, алгоритмическом статичном двунаправленном дереве, имеющим сложность по всем параметрам. Не считаю эту статью чем-то выдающимся, никуда не претендую, это всего лишь отчет моей работы. Если вам понравится можете свободно пользоваться.

В качестве небольшого предисловия:
Зачем я спроектировал дерево?

Я пишу научный проект из сферы биологии, где присутствует элемент иерархии, и для последовательного выполнения действий следовало отсортировать данные по приоритетам, при этом делать это максимально быстро и эффективно.

Пример профилей поведения будет в конце статьи.

Читать отчет
Категории: C, C++

Cocos2d-x тестирование производительности

Пнд, 27/01/2025 - 07:46

Всем привет, меня зовут Артурас. В свободное время пишу браузерный движок для игр jsge, делаю на нем небольшие игрушки и работаю над улучшением его производительности.

Наиболее шустрые приложения пишутся на C++. Мне захотелось отвлечься, обогатить свой опыт и погонять популярные движки на этом замечательном языке.

Результат тестирования движка cocos2d-x мне показался интересным и я решил поделиться с Хабром.

Читать далее
Категории: C, C++

Точность позиционирования объектов в играх: возможные ошибки

Пнд, 27/01/2025 - 03:11

- Чем чревато брать float или double в качестве типа данных для хранения позиций объектов?
- Как это может повлиять на наличие багов в игре и ошибки синхронизации сетевой игры или реплеев?

Об этом вы узнаете в этом гайде с наглядными гифками и пруфом на C++

Читать далее
Категории: C, C++

Установка Qt на Windows без регистрации и VPN. Часть 1. VisualStudio Community + Conan.io

Пнд, 27/01/2025 - 00:36

До присоединения Qt Group к санкциям, для установки Qt Framework and Tools было достаточно скачать Qt Online Installer, ввести данные учетной записи и выбрать интересующие компоненты в меню. Ныне приходится выбирать из скольких вариантов установки: прибегнуть к помощи одного из пакетных менеджеров или собрать из исходников. У каждого варианта есть свои плюсы и минусы. В этой статье рассмотрим установку через один из наиболее популярных пакетных менеджеров для с++ Conan.

Целевая операционная система: Windows 10

Шаг 0. Установка компилятора

Скачиваем с официального сайта VisualStudio Community

https://visualstudio.microsoft.com/ru/downloads/

Запускаем инсталлятор, для работы понадобится набор «Разработка классических приложений С++»

Читать далее
Категории: C, C++

Гайд по подготовке к собеседованию для Backend-разработчиков

Пнд, 27/01/2025 - 00:22

Недавно я провёл своё 40-е собеседование в Booking.com, где оцениваю кандидатов по кодингу, системному дизайну и код‑ревью. Я хорошо понимаю ожидания от кандидатов на разные уровни: core developer, senior developer и engineering manager. Эти знания могут быть полезны для тех, кто готовится к собеседованию в Booking.com или других крупных компаниях с аналогичной структурой.

Читать далее
Категории: C, C++

Большая распродажа компьютерной литературы

Полный список здесь