C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
Для программистов важно понимать устройство и организацию оперативной памяти — от этого зависит надёжность и производительность кода. Особенно критично это для тех, кто пишет на C, где есть уйма возможностей для ручного управления памятью: malloc, jemalloc, tcmalloc, mimalloc...

👉Узнайте больше на бесплатном авторском вебинаре Дмитрия Кириллова «Написание расширения PostgreSQL на языке С»: регистрация

На уроке узнаете:
- как устроена оперативная память на уровне операционной системы
- что происходит при динамическом распределении памяти (и зачем нужны специализированные аллокаторы)
- как грамотно управлять памятью, чтобы повысить качество своего кода

🤝Понравится вебинар — продолжите обучение на онлайн-курсе «Программист С» по специальной цене!

erid: LjN8JtvKc
➡️ V8

Если вам нужен удобный инструмент для работы с JavaScript, V8 отлично подойдёт.

V8 использует классы на C++ в namespace V8, что позволяет работать с JavaScript через привычную оболочку C++. Объекты C++ и V8 взаимодействуют через v8::Handle (template-классы).

Установка V8 занимает немного времени и очень полезна для работы с JavaScript. Кроме того, знания о библиотеках, связывающих C++ и JavaScript, часто спрашивают на собеседованиях, поэтому стоит с ними познакомиться даже если вы не планируете работать с JavaScript.

C++ Learning 👩‍💻
➡️ Check

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

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

Для модульного тестирования на языке С++ используется Google C++ Testing Framework (Google Test).

🔗
Ссылочка на доку

C++ Learning 👩‍💻
➡️ ZBar

Библиотека ZBar предназначена для распознавания штрихкодов из изображений.

ZBar имеет предельно простую и логичную документацию без «тёмной магии» и необъяснимых функций.

Работать с ней легко и удобно. Можно использовать из программных интерфейсов С, С++, Питона и других языков программирования.

🔗
Ссылочка на доку

C++ Learning 👩‍💻
➡️ Active Template Library

ATL (Active Template Library) — это библиотека шаблонов C++ с открытым исходным кодом, созданная для упрощения программирования объектов COM.

Поддерживает функции COM, такие как стандартные реализации, двойные интерфейсы и ActiveX-контролы.

Разработана Microsoft как замена MFC для COM-объектов, используя шаблон CRTP.

🔗
Ссылочка на доку

C++ Learning 👩‍💻
➡️ FloatX

FloatX — это библиотека для эмуляции чисел с плавающей запятой низкой точности. Ее можно использовать в программах на C++, Python и Fortran.

Заголовочная библиотека: расширяет типы с плавающей запятой за пределы одинарной и двойной точности.

Шаблонные типы: позволяют задать количество бит для экспоненты и других важных частей чисел с плавающей запятой.

Разработана на C++: основана на библиотеке FlexFloat (разработана на C), использует обертки на C++.

Расширенные функциональности: предоставляет надмножество возможностей FlexFloat.

Ограничения: не реализует произвольные типы чисел с плавающей запятой.

🔗
Ссылочка на доку

C++ Learning 👩‍💻
🦾Хардкорный тест по языку С🦾

📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «Программист С» от OTUS. Сможете сдать - пройдете на курс по спеццене!

Время прохождения теста ограничено 30 минут

👉ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
➡️ mlpack

mlpack — надёжная и быстрая библиотека для машинного обучения на C++, работающая через заголовочные файлы.

Поддерживает привязки к другим языкам: Go, Julia, R и Python.

Помогает реализовывать модели и функции машинного обучения, как "швейцарский нож" для исследователей.

Обладает надёжными интерфейсами и лёгким весом, что делает её идеальной для развертывания.

Подходит для интерактивного прототипирования через C++ блокноты.

🔗
Ссылочка на доку

C++ Learning 👩‍💻
👍Пройдите тест по IoT👍

📌Пройдите тест из 10 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «IoT Developer» от OTUS. Сможете сдать - пройдете на курс со скидкой!

Время прохождения теста ограничено 10 минут

👉ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
➡️ Эффективное использование std::tuple для группировки возвращаемых значений в C++

Использование std::tuple позволяет легко возвращать и обрабатывать несколько значений из функции без необходимости создания дополнительных структур.

Использование std::tuple позволяет улучшить читаемость и упростить код, когда нужно возвращать несколько значений из функции.

C++ Learning 👩‍💻
➡️ Оптимизация работы с большими массивами: Использование std::vector и перемещения

В C++ работа с большими массивами может быть неэффективной, если каждый раз создавать копии данных.

Вместо этого можно воспользоваться возможностями стандартной библиотеки, такими как std::vector и перемещение (move semantics), чтобы улучшить производительность.

• std::vector — это динамический массив с возможностью автоматического управления памятью.

Перемещение (std::move) позволяет передать владение данными без копирования, что существенно снижает накладные расходы при работе с большими объемами данных.

После перемещения myVector остаётся в валидном, но неопределённом состоянии. В данном случае его размер будет равен 0.

C++ Learning 👩‍💻
➡️ Индексирование массива (Оператор подиндексации) является коммутативным

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

int arr[] = {1, 2, 3, 4};   
std::cout << arr[1] << std::endl;
std::cout << 1[arr] << std::endl;

for (int i = 0; i < 4; ++i)
std::cout << i[arr] << std::endl;


Это происходит потому, что выражение array[index] эквивалентно *(array + index), что в свою очередь то же самое, что *(index + array), что переводится обратно в index[array].

C++ Learning 👩‍💻
➡️ Собственный new для класса

Оператор new в классе Widget должен работать так:

Установить глобальный обработчик для new через set_new_handler, указав функцию из класса Widget.

Вызвать глобальный operator new. Если он не справится, сработает обработчик Widget.

Если и это не поможет, глобальный new выбросит исключение. В этом случае обработчик Widget должен восстановить исходный обработчик и передать исключение дальше.

Если память выделена успешно, вернуть указатель и восстановить предыдущий обработчик new.

C++ Learning 👩‍💻
➡️ Использование set_new_handler

Обработчик оператора new циклически ищет память.

Можно зарезервировать и освободить память при первом вызове.

Можно установить или удалить другой обработчик.

Нулевой указатель через set_new_handler вызывает исключение сразу.

В обработчике new можно вызвать исключение bad_alloc или завершить программу с помощью abort или exit.

Для конкретного типа объектов можно задать свои set_new_handler и operator new.

C++ Learning 👩‍💻
📊 @finadviz — Ваш Гид в Мире Финансов! 📊

Ищете глубокие обзоры и инсайты о финансах, рынках и экономике? Финэдвайz — это то, что вам нужно! 🌟

🔍 Экспертные обзоры:
Получайте качественные аналитические материалы от финансовых экспертов.

📈 Инсайты рынка:
Оперативная информация и прогнозы, которые помогут вам принимать обоснованные решения.

🌐 Широкий спектр тем:
От личных финансов до глобальных экономических трендов.

Подпишитесь на Финэдвайz и будьте на шаг впереди! 📉📊
➡️ Правильный менеджер памяти

Создать эффективный менеджер памяти сложно из-за множества нюансов.

Часто игнорируются переносимость, выравнивание и безопасность.

Рассмотрите готовые решения, такие как коммерческие продукты или open source проекты, например, библиотеку Pool из Boost.

Современные компиляторы могут отлаживать функции управления памятью.

C++ Learning 👩‍💻
Злой Банкстер – твой гид в мире финансов. Новости, аналитика, лайфхаки – всё, чтобы ты принимал взвешенные решения и богател!

Подписывайся — @Zloy_Bankster 👍
➡️ Разделяемые блокировки

Разделяемые блокировки полезны, когда:

Блокировка удерживается долго.
Несколько читателей могут одновременно её захватывать.

Схема разделяемой блокировки может быть эффективной, если:

Блокировка удерживается длительное время, например, при работе с большим контейнером.

Основной вопрос:

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

C++ Learning 👩‍💻
😈 Злой Рекламщик – канал про маркетинг без розовых очков.

🔥 Разбираем кейсы, которые работают.
🔥 Делимся фишками, о которых не расскажут другие.
🔥 Режем правду-матку про digital и медиа.

Подпишись, если не боишься правды: @zloy_reklamshik