C++ Academy
16.2K subscribers
701 photos
133 videos
1 file
652 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
🧠 Продвинутая задача на C++ — Оптимальный доступ к матрице с кешированием

Задача:
У вас есть матрица N x M, хранящаяся в виде одномерного массива (row-major).
Нужно реализовать класс Matrix, поддерживающий:
- Быстрый доступ get(i, j) и set(i, j, value)
- Локальность данных при сканировании по строкам и по столбцам
- При этом: сравнить производительность строкового и столбцового прохода


int main() {
Matrix mat(10000, 10000);
// Заполнить матрицу числами
for (int i = 0; i < 10000; ++i)
for (int j = 0; j < 10000; ++j)
mat.set(i, j, i + j);

// Сумма по строкам
long long row_sum = 0;
for (int i = 0; i < 10000; ++i)
for (int j = 0; j < 10000; ++j)
row_sum += mat.get(i, j);

// Сумма по столбцам
long long col_sum = 0;
for (int j = 0; j < 10000; ++j)
for (int i = 0; i < 10000; ++i)
col_sum += mat.get(i, j);
}


Вопрос:
Почему сканирование по строкам быстрее, чем по столбцам, даже если данные одинаковые?

---

Разбор:


class Matrix {
private:
int rows, cols;
std::vector<int> data;

public:
Matrix(int r, int c) : rows(r), cols(c), data(r * c) {}

int get(int i, int j) const {
return data[i * cols + j];
}

void set(int i, int j, int value) {
data[i * cols + j] = value;
}
};


Ответ:
Память в C++ выделяется линейно.
В std::vector<int> data, элементы строки хранятся подряд в памяти.
То есть mat[0][0], mat[0][1], ..., mat[0][9999] идут подряд.

Когда мы сканируем по строкам, процессор использует кеш строк памяти эффективно.
Когда же мы сканируем по столбцам, мы прыгаем по памяти через cols шагов → кеш не успевает подгружать нужные блоки → больше cache misses → медленнее.

---

🧠 Вывод:
- Даже при правильном коде, порядок доступа к памяти критически важен
- Понимание устройства кеша CPU помогает писать реально быстрый код
- Такие задачи полезны для подготовки к системному программированию, оптимизации и собеседованиям

#cpp #performance #cache #memory #optimize
14🔥4👍1🥰1🤝1
🖥 Высокопроизводительная P2P библиотека на C++17

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

🚀 Основные моменты:
- Высокая производительность с использованием C++17
- Поддержка DHT, mDNS и STUN для обнаружения узлов
- Безопасная передача данных с шифрованием и проверкой целостности
- Удобный API для работы с событиями и сообщениями
- Кроссплатформенность: Windows, Linux, macOS

📌 GitHub: https://github.com/DEgitx/librats

#cpp

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4🥰1
🛠️ Оптимизированные компиляторы с LLVM

LLVM — это мощный инструмент для создания высокоэффективных компиляторов и сред выполнения. Он включает в себя множество компонентов, таких как Clang для компиляции C и C++, а также библиотеки и утилиты для работы с промежуточными представлениями.

🚀 Основные моменты:
- Поддержка множества языков программирования.
- Включает стандартную библиотеку libc++.
- Инструменты для анализа и оптимизации биткода.
- Активное сообщество и поддержка.

📌 GitHub: https://github.com/llvm/llvm-project

#cpp
👍86🔥3
🗺️ Интеграция MapLibre Native и Slint

Проект демонстрирует, как объединить библиотеку карт MapLibre Native с UI-фреймворком Slint для создания интерактивных картографических приложений. Поддерживает кроссплатформенность и различные графические бэкенды.

🚀Основные моменты:
- Гибридный рендеринг на GPU и CPU
- Интеграция карт в интерфейсы Slint
- Поддержка Linux, Windows и macOS
- Взаимодействие с картами (в процессе)
- Автоматическая загрузка зависимостей Slint

📌 GitHub: https://github.com/maplibre/maplibre-native-slint

#cpp
🔥10❤‍🔥54
🛠️ Создание недорогого XYZ-манипулятора с высокой точностью

MicroManipulatorStepper — это открытый проект для сборки моторизованного XYZ-манипулятора, обеспечивающего субмикронную точность. Идеален для оптической настройки, пробирования электронных компонентов и микроскопии. Устройство управляется через G-Code и легко интегрируется в другие проекты.

🚀 Основные моменты:
- Высокая точность до 50 нм благодаря магнитному редуктору.
- Простая сборка с использованием доступных компонентов и FreeCAD.
- Поддержка 6DOF-планирования движения для сложных манипуляций.
- Легкий доступ к электронике без SMD-пайки.

📌 GitHub: https://github.com/0x23/MicroManipulatorStepper

#cpp
9👍2🔥1
🚀 Предложения по C++ 📜

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

🚀 Основные моменты:
- Сборник предложений по C++
- Обсуждение новых идей и улучшений
- Вклад сообщества в развитие языка
- Поддержка различных концепций

📌 GitHub: https://github.com/ZXShady/proposals

#cpp
3👍3🥰1
🧩 Компактная библиотека для сопоставления шаблонов в C++

Patternia — это заголовочная библиотека для C++, обеспечивающая сопоставление шаблонов на этапе компиляции с использованием возможностей C++20/23. Она предлагает богатый набор встроенных паттернов и удобный DSL для создания читаемых выражений сопоставления.

🚀Основные моменты:
- Заголовочная библиотека без зависимостей
- Поддержка компиляции на этапе времени
- Удобные паттерны для значений и отношений
- Читаемый синтаксис с автоматическим разрешением перегрузок

📌 GitHub: https://github.com/sentomk/patternia

#cpp
3👍2🤣1
🚀 Современный ORM и генератор SQL для C++20

sqlgen — это типобезопасный ORM и генератор SQL, вдохновленный SQLAlchemy и Diesel. Он обеспечивает компоновку запросов с проверкой типов на этапе компиляции и защитой от SQL-инъекций, что делает его идеальным для создания надежных ETL-пайплайнов.

🚀Основные моменты:
- 🔒 Компиляция с проверкой схем таблиц и запросов
- 🛡️ Защита от SQL-инъекций с параметризованными запросами
- 🔄 Удобный интерфейс для составления сложных запросов
- 🚀 Высокая производительность с пакетными операциями
- 📦 Поддержка PostgreSQL и SQLite

📌 GitHub: https://github.com/getml/sqlgen

#cpp
👍2🔥21
📜 Библиотека форматирования {fmt} для C++ 🚀

{fmt} — это быстрая и безопасная библиотека форматирования, предлагающая альтернативу стандартным средствам C и C++. Она поддерживает современный синтаксис форматирования и обеспечивает высокую производительность.

🚀 Основные моменты:
- Простое API для форматирования с поддержкой позиционных аргументов.
- Реализация стандартов C++20 и C++23 для форматирования.
- Безопасность: ошибки в строках формата выявляются на этапе компиляции.
- Высокая производительность по сравнению с iostream и стандартными функциями.
- Легкость в использовании и отсутствие внешних зависимостей.

📌 GitHub: https://github.com/fmtlib/fmt

#cpp
3👍2🔥2
🖥 Seer: GUI для GDB на Linux

Seer — это графический интерфейс для GDB, упрощающий отладку программ на Linux. Он предлагает интуитивно понятный интерфейс с возможностями управления переменными, точками останова и журналами вывода. Проект активно развивается и поддерживает как Qt5, так и Qt6.

🚀 Основные моменты:
- Удобный интерфейс для работы с GDB.
- Поддержка обратной отладки.
- Управление переменными и точками останова.
- Логи и вывод GDB в одном месте.
- Активное развитие и обновления.

📌 GitHub: https://github.com/epasveer/seer

#cpp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1711👍4😁1
🏎️ Сравнение производительности C++20 кода

ComPPare — это инструмент для бенчмаркинга и валидации, позволяющий сравнивать производительность различных реализаций функций на CPU, OpenMP, CUDA и других платформах. Он идеально подходит для разработчиков, которые переносят функции в новые фреймворки или аппаратные средства.

🚀 Основные моменты:
- Поддержка различных бэкендов для функций.
- Подробное время выполнения с разделением на ROI и накладные расходы.
- Встроенная проверка ошибок для распространенных типов данных.
- Легкость в использовании благодаря заголовочному файлу.

📌 GitHub: https://github.com/funglf/ComPPare

#cpp
🔥62👍1
📦 Удобное управление .env файлами в C++ ⚙️

cppenv — это заголовочная библиотека для C++, упрощающая работу с .env файлами в проектах. Она обеспечивает безопасную загрузку переменных окружения и предлагает простой API для их доступа, что делает её идеальным инструментом для управления конфигурацией.

🚀Основные моменты:
- Заголовочная библиотека, не требует сборки
- Легкая загрузка и доступ к переменным окружения
- Идеально подходит для C++ проектов

📌 GitHub: https://github.com/Tina-1300/cppenv

#cpp
👍9❤‍🔥2🔥2💘1
🚀 Эффективная библиотека конечных автоматов на C++17

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

🚀 Основные моменты:
- Поддержка различных типов состояний и событий
- Высокая производительность без зависимостей
- Простота в использовании и настройке
- Лицензия Boost Software License

📌 GitHub: https://github.com/fgoujeon/maki

#cpp
❤‍🔥6👍2
🚀 Полное руководство по import std; в C++23

Этот репозиторий предлагает точную конфигурацию для работы с import std; в GCC 15.1 и CMake 4.1. Сэкономьте время, следуя проверенным настройкам и избегая распространенных ошибок.

🚀 Основные моменты:
- Необходима установка CXX_MODULE_STD 1 для всех целей
- Поддержка CMake 4.1+ для экспериментального импорта
- Точный UUID для включения модуля
- Полная поддержка C++23 обязательна
- Примеры проектов для быстрой настройки

📌 GitHub: https://github.com/JRASoftware/cpp23-import-std-guide

#cpp
🔥5👍4🥰1
🚀 Высокоскоростная компрессия с OpenZL

OpenZL предлагает специализированные алгоритмы сжатия, оптимизированные под конкретные форматы данных, обеспечивая высокую скорость и эффективность. Идеально подходит для работы с большими объемами специализированных наборов данных, таких как AI-рабочие нагрузки.

🚀Основные моменты:
- Высокие коэффициенты сжатия при сохранении скорости
- Специализированные компрессоры для различных форматов
- Совместимость с универсальным декомпрессором
- Активная разработка и поддержка стабильности API

📌 GitHub: https://github.com/facebook/openzl

#cpp
❤‍🔥3👍21
🏗️ Высокопроизводительный пул памяти с метапулом

metapool — это легковесный и быстрый аллокатор памяти, оптимизированный для игровых движков. Он использует пуловую структуру для повышения производительности, достигая до 1300 раз большей скорости по сравнению с malloc. Поддерживает адаптеры для стандартных контейнеров, что делает его универсальным решением для управления памятью.

🚀 Основные моменты:
- Высокая скорость выделения памяти
- Без внешних зависимостей, просто подключите mtp_memory.hpp
- Адаптеры для std::allocator и std::pmr::memory_resource
- Поддержка пользовательских контейнеров и метасетов
- Инструменты для отслеживания использования памяти

📌 GitHub: https://github.com/esterlein/metapool

#cpp
9🔥4🥰1
🚀 Библиотека RAD для асинхронной разработки на C++20

RAD — это библиотека для асинхронного ввода-вывода и сетевого программирования, использующая возможности C++20, такие как корутины и лямбды. Она включает парсеры JSON, URL и HTTP, а также обертки для SQLite и ODBC, упрощая разработку сетевых приложений.

🚀 Основные моменты:
- Поддержка асинхронных операций с помощью корутин.
- Включает различные парсеры и обертки для баз данных.
- Реализует концепции исполнителей для управления асинхронными задачами.
- Легко интегрируется с существующими решениями на основе asio.

📌 GitHub: https://github.com/just-language/rad

#cpp