С
С/С++ Portal | Программирование
17.07.2026 17:41 · 👁 683
Когда std::vector увеличивает свою емкость, он поочередно копирует каждый элемент, а затем уничтожает исходные объекты.
Для типов, которые по сути представляют собой просто набор битов (string, unique_ptr, сам vector), такое копирование с последующим уничтожением — лишняя работа.
В C++26 компилятор сможет вместо этого использовать memcpy.
Предложение P2786 добавляет в C++26 тривиальную перемещаемость. Пометьте свой тип как trivially_relocatable, и контейнеры смогут переносить элементы одним вызовом memcpy вместо копирования с последующим уничтожением.
Измеренное ускорение при перераспределении памяти vector для распространенных типов: от 2 до 10 раз.
👉 @Cpportal
С
С/С++ Portal | Программирование
17.07.2026 15:41 · 👁 795
На Stepik вышла программа «DevOps с нуля: от Linux до Kubernetes»
Это комплексная программа из 5 практических курсов по ключевым технологиям DevOps: Linux, Git, Docker, GitLab CI/CD, Kubernetes
Вы последовательно пройдёте путь от работы в Linux и управления кодом через Git до контейнеризации приложений, настройки CI/CD-пайплайнов и развёртывания в Kubernetes.
Что вы изучите:
• работу с Linux и командной строкой
• Git и контроль версий в реальных проектах
• создание Docker-образов и запуск контейнеров
• автоматизацию сборки, тестирования и деплоя в GitLab CI/CD
• развёртывание и управление приложениями в Kubernetes
• сети, хранилища, конфигурации и секреты
• диагностику инфраструктуры и автоматизацию рутинных задач
... и многое другое
Все знания закрепляются на практике с помощью заданий с автопроверкой.
Материал подаётся последовательно и понятным языком: с примерами, схемами и демонстрациями. Во время обучения можно задавать вопросы по урокам и заданиям, получать обратную связь и помощь при возникновении сложностей.
После прохождения программы вы получите сертификат, который можно добавить в резюме.
Скидка 20% на 48 часов: по промокоду DEVOPS20 стоимость всей программы составит 10 392 ₽.
Открыть программу на Stepik
С
С/С++ Portal | Программирование
17.07.2026 06:07 · 👁 1.2K
Парсинг URL в C++ не должен требовать сторонней зависимости, регулярных выражений или 200 строк самописного кода для разбиения строк.
Boost.URL предоставляет парсинг URL в соответствии с RFC. url_view выполняет разбор без выделения памяти, а сам парсинг теперь поддерживает constexpr.
Boost.URL поддерживается C++ Alliance. Среди последних обновлений — constexpr-парсинг, независимый аудит безопасности и полностью переработанная документация с использованием MrDocs.
Парсите, изменяйте и разрешайте URL через типобезопасный API. Библиотеку можно использовать как header-only или в скомпилированном виде. Она работает с std::string и string_view.
Documentation: boost.org/libs/url Source: github.com/boostorg/url
👉 @Cpportal
С
С/С++ Portal | Программирование
16.07.2026 16:07 · 👁 1.3K
std::string вызывает malloc у вас за спиной. Как только строка выходит за пределы small buffer optimization, каждое присваивание незаметно обращается к куче.
На hot path это приводит к неожиданным задержкам. А в embedded- или real-time-коде динамическое выделение памяти может быть вообще недопустимо.
Но что, если максимальная длина строки известна на этапе компиляции?
Строка фиксированной ёмкости static_string<N>, которая хранит символы внутри самого объекта, не использует кучу и предоставляет интерфейс, совместимый с std::string.
Превышение ёмкости N приводит к определённой ошибке, которую можно перехватить, а не к незаметному перевыделению памяти. static_string можно даже использовать в качестве нетипового параметра шаблона.
Отлично подходит для embedded-систем, real-time-кода и hot path.
https://godbolt.org/
👉 @Cpportal
С
С/С++ Portal | Программирование
16.07.2026 06:07 · 👁 1.4K
Масштабирование множества Мандельброта на C
Сложная динамика возникает при многократном выполнении итерации z = z² + c для миллионов пикселей.
Для плавных цветовых переходов используется формула
ν = n + 1 − log(log|z|) / log(2).
Адаптивное количество итераций увеличивается примерно пропорционально −log(zoom), что позволяет эффективно сохранять детализацию при глубоком приближении.
Косинусные палитры вычисляют цвет по формуле
RGB = 0.5 + 0.5 cos(2πt + φ) для каждого кадра.
Полный исходный код - https://github.com/Corg-Labs/mandel
👉 @Cpportal
С
С/С++ Portal | Программирование
15.07.2026 16:07 · 👁 1.4K
Программирование BMP-изображения на C
youtu.be/UnW8TKlJUYg
👉 @Cpportal
С
С/С++ Portal | Программирование
15.07.2026 06:07 · 👁 1.5K
Переполнение знаковых целых чисел считается неопределённым поведением ещё со времён C89.
И только в C23 появился стандартный способ проверить возможность переполнения, не выполняя сначала саму операцию.
👉 @Cpportal
С
С/С++ Portal | Программирование
14.07.2026 16:07 · 👁 1.6K
Все научились затирать пароли перед вызовом free().
Но годами компилятор незаметно удалял эту операцию. Не потому, что она была некорректной, а потому, что мог доказать: эти байты больше никто не прочитает.
Безопасность проигрывала оптимизации, пока в C23 наконец не появился memset_explicit().
👉 @Cpportal
С
С/С++ Portal | Программирование
14.07.2026 06:06 · 👁 1.6K
Мы можем реализовать алгоритм рисования линии Брезенхэма, используя только целочисленную арифметику и сложение.
Он вычисляет координаты пикселей для растеризации линий без операций с плавающей точкой и без деления.
void bresenham(int x0, int y0, int x1, int y1,
void (*plot)(int, int)) {
int dx = abs(x1 - x0);
int dy = abs(y1 - y0);
int sx = x0 < x1 ? 1 : -1;
int sy = y0 < y1 ? 1 : -1;
int err = dx - dy;
while (1) {
plot(x0, y0);
if (x0 == x1 && y0 == y1)
break;
int e2 = 2 * err;
if (e2 > -dy) {
err -= dy;
x0 += sx;
}
if (e2 < dx) {
err += dx;
y0 += sy;
}
}
}
👉 @Cpportal
С
С/С++ Portal | Программирование
13.07.2026 16:07 · 👁 1.6K
Создание распределённых систем с нуля
Процесс выбора лидера кажется простым: достаточно просто выбрать лидера. Но каждый, кто работал с реальным кластером, знает, насколько интересными бывают сбои: разделение голосов, устаревшие лидеры и узлы, которые не могут прийти к согласию о том, кто сейчас главный.
Raft решает эту задачу благодаря удачному сочетанию случайных тайм-аутов и голосования на основе термов. Но по-настоящему понимаешь, почему это работает, только когда отлаживаешь кластер, который упорно не может выбрать лидера.
В этом модуле вы реализуете механизм выбора лидера в Raft с нуля. Вы создадите три состояния узла (Leader, Follower и Candidate), реализуете heartbeat-сообщения для проверки доступности, случайные тайм-ауты для предотвращения разделения голосов и RPC RequestVote с корректным управлением термами.
Затем вы разберётесь с наиболее неприятными случаями: разделением голосов, требующим повторного голосования, устаревшими кандидатами, которые не должны побеждать, и сценариями сетевого разделения, когда обе группы узлов считают, что у каждой есть свой лидер.
Консенсус — самая сложная часть распределённых систем, и именно в механизме выбора лидера скрывается большинство ошибок алгоритмов консенсуса. Реализовать его самостоятельно, увидеть, как он ломается, исправить ошибки и наблюдать, как кластер снова приходит к согласованному состоянию, — именно это отличает знание Raft от его настоящего понимания.
👉 @Cpportal