cpp_lib | Unsorted

Telegram-канал cpp_lib - Библиотека C/C++ разработчика

2630

Полезные материалы по всему, что может быть полезно плюсовику/сишнику.

Subscribe to a channel

Библиотека C/C++ разработчика

Как избежать утечек памяти в C?

В C нет std::vector, а значит, памятью нужно управлять вручную. Как не допустить утечек?

📌 Основные правила:
1️⃣ Всегда проверяйте malloc:


int* ptr = malloc(10 * sizeof(int));
if (!ptr) { perror("malloc failed"); exit(1); }

2️⃣ Освобождайте память free(), когда она больше не нужна.
3️⃣ Используйте инструменты типа Valgrind для проверки утечек.

Какой ваш любимый инструмент для поиска утечек памяти?

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Constexpr — компилируем код на этапе сборки

Сегодня хотел еще поговорть про constexpr и как он помогает делать код быстрее за счёт вычислений на этапе компиляции.

Что делает constexpr?
Если функция объявлена с constexpr, то компилятор попытается выполнить её во время компиляции, если это возможно.

Простой пример:


constexpr int square(int x) {
return x * x;
}

Теперь, если мы напишем:

int val = square(5);

То компилятор подставит 25 прямо в код, и вычисление не будет выполняться во время выполнения программы!

Более сложный пример:
Представьте, что у нас есть факториал:

constexpr int factorial(int n) {
return (n <= 1) ? 1 : (n * factorial(n - 1));
}

Теперь вызов factorial(5) будет заменён на 120 ещё до запуска программы.

📌 Итог: constexpr помогает убирать лишние вычисления из рантайма, делая код быстрее.

А вы используете constexpr? Делитесь своими кейсами! 🚀

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Оптимизация кода с помощью std::string_view

Привет, друзья! Сегодня разберём полезную штуку для работы со строками — std::string_view. Если ваш код активно использует std::string, но вам нужно просто просматривать данные без ненужных аллокаций и копирований, то std::string_view — это то, что нужно!

Пример проблемы:


std::string extract_extension(const std::string& filename) {
size_t pos = filename.rfind('.');
if (pos == std::string::npos) return "";
return filename.substr(pos);
}

Казалось бы, код работает, но есть нюанс: substr(pos) создаёт новую строку, что лишний раз тратит память.

Оптимизированный вариант:

std::string_view extract_extension(std::string_view filename) {
size_t pos = filename.rfind('.');
if (pos == std::string_view::npos) return {};
return filename.substr(pos);
}

Здесь std::string_view просто создаёт представление на часть строки без копирования данных.

🔥 Итог: код стал быстрее и экономичнее! Используйте std::string_view, когда вам не нужно владение строкой.

Что думаете? Используете std::string_view в своём коде? Делитесь в комментариях! 🔥

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Подборка Telegram каналов для программистов

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Библиотека C/C++ разработчика

#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель

🦉  OTUS ищет преподавателей на онлайн-курсы:
С++ Developer Basic
С++ Developer Professional

Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно!

Требуется:
- Знание С++17, STL, ООП, Git, опыт коммерческой разработки на C++ от 3 лет, понимание RAII, SOLID, SFINAE. Опыт многопоточного и асинхронного программирования.

Обязанности:
- подготовиться к занятиям (темы на выбор, материалы предоставляются)
- преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи.

Условия:
✅ гибкий график, легко совмещать с основной работой, занятия в вечернее время;
✅  оплата от 4000 до 6000 руб. за 1,5 часа занятия;
✅ бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей.

Обсудить подробнее: @candyfox24

Читать полностью…

Библиотека C/C++ разработчика

Поговорим об observability на Яндекс Infra Meetup #4

Приглашаем на митап про наблюдаемость приложений от Яндекс Go и Техплатформы Екома и Райдтеха Яндекса. В программе два трека, выбрать можно любой: 

CaseLab: observability. Интерактивный формат решения практических задач совместно с модераторами. 

CaseStudy. 3 доклада от спикеров сервисов: 
— Толя Беляев расскажет про варианты сбора метрик приложения микросервисной архитектуры
— Леша Королев объяснит, как построить дашборд всей платформы Такси
— Леша Золотухин покажет, как создать диагностические дашборды в инфраструктуре на 2000+ микросервисов

После CaseLab и докладов — нетворкинг в неформальной атмосфере и афтепати.
13 февраля, 18:30
Москва, офлайн
 Успейте зарегистрироваться и зовите коллег!
 
Обратите внимание, количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки.

Читать полностью…

Библиотека C/C++ разработчика

Perforator узнает, где тормозит ваш код

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

Perforator поддерживает:

🔹 Нативные языки: C++, C, Go, Rust
🔹Экспериментально: Python и Java

Его можно развёртывать на:
🔹 Kubernetes
🔹 Локально

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

Уже сейчас Perforator можно скачать и протестировать самостоятельно. Исходный код доступен под лицензией MIT (и GPL для eBPF-программ) и запускается под x86-64 Linux. Визуализацию работы сервиса нашел здесь.

статья

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Автоматическая Генерация Конфигураций для Make Сборок

При разработке программного обеспечения (особенно для микроконтроллеров) рано или поздно придется столкнуться с тем, что надо как-то передавать конфигурации для данного программного проекта.

В своем опыте я пришел к выводу, что с точки зрения масштабирования кодовой базы, конфиги проще всего передавать через переменные окружения. Да.. Плюс в том, что переменные окружения можно определять прописывая прямо в скриптах (Make, CMake и т.п.).

Выглядит это так. У каждой сборки есть файл config.mk в котором перечислены программные компоненты из которых должна собираться эта конкретная сборка. Содержимое этого файла обычно выглядит так.

https://habr.com/ru/articles/798213/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

C++: Эмулятор NES с нуля

#1: Bitwise Basics & Overview
#2: The CPU (6502 Implementation)
#3: Buses, RAMs, ROMs & Mappers
#4: PPU - Background Rendering
#5: PPU - Foreground Rendering
#6: APU - Sounds, Beeps & Bloops
#7: More About Mappers

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

🦾Хардкорный тест по языку С++🦾

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

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

👉ПРОЙТИ ТЕСТ

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

Читать полностью…

Библиотека C/C++ разработчика

Сборка C++ проектов. CMAKE. Статические, динамические библиотеки. Github actions. GE серии

0:00:00 - Введение
0:01:20 - Статические библиотеки в CMAKE
0:09:22 - Динамические библиотеки в CMAKE
0:17:22 - Создаем таргет тестирования
0:27:24 - Пользовательский интерфейс CMAKE, опции
0:31:08 - Github actions

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

👩‍💻 Ваш код на C++ мог бы быть быстрее. Намного быстрее.

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

🗓 На открытом уроке «Оптимизация производительности на C++» 30 января в 20:00 мск мы разберем инструменты gprof, valgrind, Google Benchmark, секреты работы с кэш-памятью, управление памятью и даже оптимизации компилятора.

🦾 Присоединяйтесь к вебинару и сделайте свои приложения молниеносными!
Участники урока получат скидку на большое обучение «C++ Developer. Professional».

➡️ Узнать больше и зарегистрироваться: https://vk.cc/cHzmKX

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

Читать полностью…

Библиотека C/C++ разработчика

Офер в Яндекс для опытных бэкендеров за два дня

15–16 февраля приглашаем бэкендеров с опытом работы от пяти лет получить офер в Яндекс через multitrack за 2 дня. Достаточно пройти несколько технических секции 15 февраля, чтобы уже 16-го получить офер и выбрать три команды, к которым вам было бы интересно присоединиться.

Как правило, за несколько собеседований сложно понять, подходит ли вам команда и наоборот. Multitrack позволит вам поработать в трёх разных командах Яндекса и выбрать подходящую. Вы сможете погрузиться в рабочие процессы, познакомиться с будущими коллегами и понять, с какими задачами и технологиями хотите работать.

Узнать подробности и зарегистрироваться.

Читать полностью…

Библиотека C/C++ разработчика

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

В прошлой статье получилось создать минимальную программу "Hello world!" размером 3,5 кб. Теперь будем рисовать нативными средствами Windows. Создадим окно, нарисуем пару примитивов.

https://habr.com/ru/articles/873318/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

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

Решил сделать цикл статей по написанию на С++, различных небольших программ. Под новые и старые ОС. Мне кажется мы стали забывать как раньше программировали:) Для себя определил несколько важных критериев.

🔹Код должен быть простым и понятным.
🔹Код должен быть переносим, как минимум Windows и Linux, поддерживать 32-ух битные и 64-ех битные процессоры.
🔹Не полагаться на стандартную библиотеку на всех платформах. Пишем свой минимальный вариант.
🔹Быть совместимым с С++/C библиотеками, так как будем их использовать в будущем.
🔹Программы и библиотеки которые я буду разрабатывать должны, делать что то осмысленное.
🔹Минимум ассемблера, все в рамках С++.

https://habr.com/ru/articles/872834/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

🔥 Почему в C++ стоит использовать std::vector, а не new[]?

Раньше динамические массивы создавали так:


int* arr = new int[100];
delete[] arr;

Но это опасно! Почему?

📌 Минусы new[] и delete[]:
❌ Нужно вручную управлять памятью.
❌ Легко забыть delete[], вызвав утечки.
❌ Нет удобных методов работы с массивом.

📌 Преимущества std::vector:
✅ Автоматически управляет памятью.
✅ Имеет удобные методы (`push_back`, size, `resize`).
✅ Совместим с алгоритмами STL.

Вот как лучше:

std::vector<int> arr(100);

А вы уже перешли на std::vector?

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

🎯 Ошибки в коде на C++ — враг номер один? Мы научим их побеждать!

Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое.

Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас.

🗓 Урок пройдёт 12 февраля в 20:00 мск.

👉 Регистрируйтесь сейчас и получите скидку на большое обучение на курсе «C++ Developer. Professional»: https://vk.cc/cIfoXL

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

Читать полностью…

Библиотека C/C++ разработчика

🚀В этой статье рассматривается минималистичная реализация виртуальной машины (VM) на C, занимающая менее 125 строк кода! 🖥️

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

🔹 Основные компоненты:
- Регистры (массив для хранения значений)
- Память (байтовый массив, хранящий инструкции и данные)
- Исполнительный цикл (разбор и выполнение инструкций)

🔹 Пример кода:
Основная идея заключается в том, чтобы хранить наши инструкции в массиве (uint16_t program[]), а затем использовать функцию fwrite() для создания бинарного файла, который мы в дальнейшем сможем загрузить с помощью ld_img().


#include <stdio.h>
#include <stdlib.h>

uint16_t program[] = {
/*mem[0x3000]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3002]=*/ 0x1220, // 0001 0010 0010 0000 ADD R1,R0,x0 ;add contents of R0 to R1
/*mem[0x3003]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3004]=*/ 0x1240, // 0001 0010 0010 0000 ADD R1,R1,R0 ;add contents of R0 to R1
/*mem[0x3006]=*/ 0x1060, // 0001 0000 0110 0000 ADD R0,R1,x0 ;add contents of R1 to R0
/*mem[0x3007]=*/ 0xF027, // 1111 0000 0010 0111 TRAP trp_out_u16;show the contents of R0 to stdout
/*mem[0x3006]=*/ 0xF025, // 1111 0000 0010 0101 HALT ;halt
};

int main(int argc, char** argv) {
char *outf = "sum.obj";
FILE *f = fopen(outf, "wb");
if (NULL==f) {
fprintf(stderr, "Cannot write to file %s\n", outf);
}
size_t writ = fwrite(program, sizeof(uint16_t), sizeof(program), f);
fprintf(stdout, "Written size_t=%lu to file %s\n", writ, outf);
fclose(f);
return 0;
}



https://www.andreinc.net/2021/12/01/writing-a-simple-vm-in-less-than-125-lines-of-c

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода

https://github.com/ssloy/tinyrenderer/wiki

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Практика языка C, 2023-2024

Семинар 1.1. Алгоритм Евклида.
Семинар 1.2. Системы счисления.
Семинар 1.3. Числа Фибоначчи.
Допсеминар: unix shell
Семинар 2.1. Простые числа.
Семинар 2.2. Побитовые вычисления.
Семинар 2.3. Время и случайность.
Углубление пройденного: логическая память и виртуальная память.
Семинар 3.1. Линейный поиск и простые сортировки.
Семинар 3.2. Стратегия "разделяй и властвуй".

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

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

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

Часть 1
Часть 2
Часть 3
Часть 4

https://habr.com/ru/articles/877542/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

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

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

В данной статье затронем частичку компиляторной истории. И постараемся собрать проект под компилятор 1995 года. Вы спросите, но зачем? Я отвечу: Потому, что можем!

Часть 1
Часть 2
Часть 3

https://habr.com/ru/articles/876272/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

❓Хотите освоить алгоритмы, которые лежат в основе многих IT-решений? Время познакомиться с магией оптимизации!

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

Алгоритмы — это как GPS для программирования. После урока вы сможете уверенно строить маршруты в графах, прокачаете свои навыки и сделаете шаг к профессиональному уровню.

⏰ Встречаемся 3 февраля в 20:00 мск, участники получат скидку на большое обучение «Алгоритмы и структуры данных».

👉 Регистрация открыта: https://vk.cc/cI0Gv4

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

Читать полностью…

Библиотека C/C++ разработчика

Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26
Сергей Талантов

В современных стандартах С++ стало меньше UB. Разбираем на конкретных кейсах.

— Начиная с С++20 отрицательные целые числа обязательно должны быть представлены в дополнительном коде. Это сокращает количество UB в битовых операциях и не только.
— Введение std::ssize, возвращающего знаковый размер контейнеров, уменьшает количество ошибок и UB в циклах.
— Расширение времени жизни временных объектов в циклах for, появившееся в С++23, решает неочевидные проблемы.
— Казалось бы, мелочь, но инициализация std::string нулевым указателем раньше была UB, a теперь запрещена.
— В С++23 появился эксклюзивный режим открытия файла (O_EXCL), что решает проблему гонок (time-of-check to time-of-use).
— Будет ли введена арифметика с насыщением в С++26?

Некоторые конструкции языка признаются небезопасными и устаревшими, также проходимся по ним:
— Осталось ли что-то от volatile?
— Можно ли теперь делать неявный захват this по значению в лямбдах?
— Какие операции с enum теперь не в почете.

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Tensor.h – Лёгкая и удобная библиотека для работы с тензорами на C

Если вам нужна простая и эффективная библиотека для работы с тензорами в C, обратите внимание на tensor.h. Этот проект предлагает лёгкую в использовании реализацию тензоров с минимальным оверхедом.

🔹 Основные возможности:
✅ Поддержка многомерных тензоров
✅ Простая и понятная API
✅ Поддержка операций над тензорами (сложение, умножение и т. д.)
✅ Небольшой размер кода


https://github.com/apoorvnandan/tensor.h

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

С++ — это настоящий кайфǃ

Я хочу, чтобы вы задали себе один вопрос и честно на него ответили. Когда в последний раз вы получали настоящее удовольствие от программирования? Оглядываясь назад, я понимаю, что не испытывал подобных ощущений, наверное… уже лет десять. Удовольствия у меня не было ни от JavaScript, ни от Python, ни от Ruby или C — ни от чего. Когда я говорю «удовольствие» — я имею в виду ощущения человека, которого во время работы над неким проектом переполняет искренний восторг. Этот человек постоянно ловит себя на такой мысли: «Ох, ну какая ж круть. Поверить не могу, что моя безумная идея и правда сработала!».

https://habr.com/ru/companies/wunderfund/articles/874216/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 03 — Начинаем разрабатывать фреймворк

В данной статье я покажу как выводить примитивы с помощью библиотеки xlib, поговорим о системных вызовах Linux и заложим базу для кроссплатформенного фреймворка.

Наш мини фреймворк будет называться LDL - Little DirectMedia Layer. Как вы поняли это отсылка к библиотеке SDL.

Часть 1
Часть 2

https://habr.com/ru/articles/874186/


#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Тонкости в распараллеливании с OpenMP программы, написанной одновременно на C++ и Fortran

В данной заметке я расскажу о своем опыте распараллеливания программы с использованием OpenMP, написанной одновременно и на С++, и на Fortran 90, причем вызов фортрановской части кода осуществляется параллельно в цикле из C++ части. Остановлюсь в основном на тех деталях и тонкостях, которые мне показались настоящими сюрпризами.

Суть программы достаточно проста: есть некая цилиндрическая структура, которая модельно разбивается на аксиальные ячейки, каждая аксиальная ячейка с использованием методов математического моделирования обсчитывается независимо. Основная часть кода написана на C++, но вот то, что нужно рассчитать для каждой аксиальной ячейки, написано на Fortran 90, и надо сказать, что эта фортрановская часть достаточно внушительная. Код испокон веков обсчитывал последовательно каждую аксиальную ячейку, и в виду того, что фортрановская часть делает объемные вычисления, код считал долго. И тут была поставлена задача – распараллелить код, т.е. считать каждую аксиальную ячейку параллельно, дабы ускорить время расчета всей программы. Была принята следующая идея: выделение памяти под массивы и т.п., необходимые для фортрановских расчетов, оставить как и прежде, т.е. там же в фортране, удобно перегруппировав их в массив объектов структуры, описывающей аксиальную ячейку, и плюсом расширив данные, а вот вызов главной функции, делающей вычисления в фортрановской части, делать в цикле по аксиальным ячейкам параллельно в C++ части, т.е. примерно так


# pragma omp parallel for
for (iaxialmesh = 0; iaxialmesh<Nmeshes; iaxialmesh++) {
CallFortranCodeForAxMesh(iaxialmesh);
}


https://habr.com/ru/articles/875334/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Подборка Telegram каналов для программистов

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Библиотека C/C++ разработчика

🔥 Хотите стать экспертом в C++ и претендовать на высокооплачиваемые вакансии в топовых IT-компаниях?

Всего за 5 месяцев на курсе «C++ Developer. Professional» вы освоите:

✔️ правильное написание кода на C++ и возможности новых стандартов вплоть до C++23;
✔️паттерны проектирования и принципы написания многопоточного кода;
✔️- взаимодействие с сетью, хранение и обработку больших объемов данных;
✔️ особенности применения новых стандартов C++20 и C++23.

И многое другое!

Программа создана для разработчиков на C++ Junior или Middle, а также для разработчиков на Java/Python.

➡️ Пройдите тест и получите скидку на обучение и доступ к подарочным урокам прямо сейчас: https://vk.cc/cHnNGf

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

Читать полностью…
Subscribe to a channel