C++ Academy
16.5K subscribers
616 photos
127 videos
1 file
579 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
🖥 Эффективное использование С++

Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++

📌 источник

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍224🔥2💩2👏1
🖥 ZTG - графический движок для консолей Windows на С++.

Скомпилируйте библиотеку как статическую и включите ее в свой проект, включите файл ZTG.h

#include "ZTG/ZTG.H"

Github

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
🖥 EFP: полезная библиотека для функционального программирования на C++

Github

#cpp #программирование

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2🤔21
💫 The Fil-C Manifesto: Garbage In, Memory Safety Out!

Язык программирования C - замечательный. На нем написана масса замечательного кода. Но C - небезопасный язык. Простые логические ошибки могут привести к тому, что злоумышленник будет контролировать, куда указывает указатель и что в него записывается, что открывает легкий путь к эксплуатации. Многие другие языки (Rust, Java, Haskell, Verse, даже JavaScript) не имеют такой проблемы!

Этот проект призван решить проблемы с безопасностью С.

Github

@cpluspluc
👍62🔥1
🖥 Работа на C или C++ требует понимания их неопределенного поведения: что это такое, каковы последствия неопределенного поведения: и как не споткнуться о него. Для простоты в статье говорится только о C, но все, что написано , применимо и к C++.

Вообще говоря, программировать на C сложнее, чем на таких языках, как Python.
В некотором смысле это связано с тем, что C - язык более низкого уровня, ближе к ассемблеру; он просто дает вам то, что дает базовая машина.

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

Читать дальше

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥2🤡2
🖥 Практика на C, 2023-2024

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

📌 источник

#cpp #programming

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍233🔥31
🖥 Супер годная и свежайшая лекция от МФТИ

Здесь рассказывается о RISC-V, о процессе сборки C++ кода, о том, что происходит в ходе компиляции под капотом, про оптимизацию программ, про ассемблер, линкер и ещё про много всего

*RISC-V — открытая и свободная система команд и процессорная архитектура на основе концепции RISC (reduced instruction set computer)

Доступ по закрытой ссылке, оцените)
🔗 Youtube

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1731🔥1💩1
🖥 Что нужно учитывать, используя std::vector?

Основные плюсы и минусы происходят от линейного расположения элементов в памяти и ограничений, которые это расположение накладывает.

std::vector имеет:

Доступ к произвольному элементу за O(1).

Проблема: При превышении capacity — долгая вставка нового элемента (даже в конец), требующая поэлементного копирования.

Решение: С этим можно побороться, если зарезервировать заранее всю нужную память под все элементы, но мы редко знаем каким будет максимальное количество элементов. И памяти на все процессы так не напасёшься, даже учитывая оптимизацию современных ОС: когда ОС физически выделяет память только когда процесс начинает её использовать.


Хороший cache coherence:
В общем случае это означает более быстрый обход контейнера vector по сравнению с контейнерами а-ля list (map, set, forward_list etc).

Проблема: В частности, нужно разбираться с cache sharing.
Если vector параллельно обходят два потока и каждый из них модифицирует его содержимое, то вероятно кэши этих потоков будет смотреть на смежную область памяти vector-а. Тогда каждая из записей будет инвалидировать содержимое кеша ядра другого потока, тем самым приводя к регулярному refetch-у. В некоторых корнер кейсах замена vector на list может внезапно привести к улучшению перфоманса.

Решение: Лечится такая проблема обычно увеличением размера элемента до размера кешлайна. Либо же выдачей каждому потоку по N элементов, где (N * sizeof(ElementT)) == cacheline size.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍224🔥2
🤮951