C/C++ Development | YeaHub – Telegram
C/C++ Development | YeaHub
828 subscribers
228 photos
56 videos
1 file
379 links
Теория, подготовка к интервью и курсы для C/C++ разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
🥺 Сегодня получил интересный вопрос: что быстрее —
n++, ++n или n + 1 ?

Ответ: n++ читает стек 3 раза, в то время как ++n и n + 1 — 4 раза.

Тесты были проведены на следующем коде (смотри фото):

++n и n + 1

Для dummy = ++n и n = n + 1; dummy = n происходит следующее:

> n инкрементируется на стеке
> значение n загружается в регистр
> регистр сохраняется в dummy на стеке

n++

Для dummy = n++ происходит следующее:

> n загружается в регистр-1
> регистр-1 инкрементируется и результат сохраняется в регистр-2
> регистр-2 сохраняется обратно на стек (обновлённое значение n)
> регистр-1 сохраняется на стек в dummy (исходное значение n)

Может показаться, что код для n++ содержит больше инструкций и поэтому должен быть медленнее, но это не так.

На практике не существует такого понятия, как «инкремент на стеке» — значение фактически загружается в процессор, инкрементируется там, а затем записывается обратно.

Если посчитать обращения к стеку (чтения и записи):

> ++n и n + 1: чтение, запись, чтение, запись — 4 обращения к стеку

> n++: чтение, запись, запись — 3 обращения к стеку

Поскольку чтение из регистра значительно быстрее, чем из стека, это делает n++ более быстрым вариантом.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#видео
😐 Изучение ядра Linux с использованием трассировки

Отличное видео о трассировке системных вызовов и о том, как это работает под капотом
Источник

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #Cplus
🤔 Что такое исключение в С++?

Исключение в С++ - это обьект, который выбрасывается во время выполнения программы, когда возникает необычная ситуация или ошибка. Исключения обрабатываются с помощью блока try-catch.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
#ЛитКод
Задача: 717. 1-bit and 2-bit Characters

У нас есть два специальных символа: первый символ может быть представлен одним битом 0. Второй символ может быть представлен двумя битами (10 или 11). Если задан двоичный массив bits, который заканчивается 0, верните true, если последний символ должен быть однобитным.

Пример:
Input: bits = [1,0,0]
Output: true


👨‍💻 Алгоритм:

1⃣Инициализируйте индекс для итерации по массиву.

2⃣Пройдите по массиву, увеличивая индекс на 1, если текущий бит равен 0, и на 2, если текущий бит равен 1.

3⃣Проверьте, достиг ли индекс последнего элемента массива, и верните результат.

😎 Решение:
bool isOneBitCharacter(vector<int>& bits) {
int i = 0;
while (i < bits.size() - 1) {
i += bits[i] + 1;
}
return i == bits.size() - 1;
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
#полезное
👋 Изучай разработку ОС, это реально увлекательно

Функция breakpoint_handler() устанавливает обработчик исключений, который перехватывает инструкции brk, выполняемые внутри целевого процесса. Здесь написана отдельная функция patch(), — она внедряет трамплин в исполняемую область памяти, и этот трамплин содержит инструкцию brk в качестве ловушки.

Когда выполнение доходит до brk, обработчик перехватывает исключение, получает доступ к регистрам потока, модифицирует x0, подставляя нужное значение возврата, продвигает счётчик инструкций, чтобы пропустить ловушку, и выполнение продолжается.

В комбинации с остальной частью моего кода это обеспечивает патчинг во время выполнения, интроспекцию ВМ и метаморфное выполнение кода.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🔥1
#полезное
❤️‍🔥 Чувак оптимизировал умножение матриц на C с использованием SIMD, блочной работы с кэшем и многопоточности, сократив время выполнения в 80 раз.
Репозиторий на GitHub

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😈32🔥1
#Собес #Cplus
🤔 Что такое аргумент по умолчанию в функции?

Аргумент по умолчанию в функции С++ — это параметр, которому присваивается значение по умолчанию. Если вызывающая сторона не передает значение для этого параметра, будет использовано значение по умолчанию.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
👨‍💻 На заметку вам: roadmap.sh/cpp

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 std::to_underlying()

std::to_underlying() (C++23) безопасно преобразует значение enum class в его базовый целочисленный тип. Это полезно для сериализации, логирования и битовых операций с strongly-typed enum'ами.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1💘1
#полезное
😊 Архитектура компьютера: Продвинутое проектирование процессоров

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Собес #Cplus
🤔 Какой оператор нельзя перегрузить в С++?

Оператор разрешения области видимости (::) нельзя перегрузить в С++. Этот оператор используется для доступа к глобальным переменным, функциям и классам.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😵 Понимание управления файловой системой в операционных системах, подобных Unix

Этот блог рассматривает тонкости того, как такие системы отслеживают файлы, управляют файловыми дескрипторами и реализуют механизмы, такие как каналы (pipes) для межпроцессного взаимодействия.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🥺 Динамическая память со структурами в языке C:

Эта программа демонстрирует, как создавать и управлять памятью для пользовательского типа данных (Person), используя malloc() и free() в языке C.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#полезное
🤓 Указатели функций в языке C:

🟠 Указатели на функции позволяют сохранять и вызывать функции динамически, как переменные, обеспечивая гибкость и модульность кода.
🟠 Они часто используются в механизмах обратных вызовов (callback), обработке событий и реализации полиморфизма в языке C

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
#Собес #Cplus
🤔 Что такое iostream в C++?

iostream - это заголовочный файл стандартной библиотеки С++, который определяет потоки ввода и вывода, такие как cin (ввод) и cout (вывод).

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😎 Чувак только что закончил свою систему анимации на C и оказалось, что она примерно в 14 раз быстрее, чем система анимации в unity.

Причём он её даже не оптимизировал — возможно, можно сделать ещё быстрее

Пара цифр:

🟠 1500 персонажей
🟠 7.3 миллиона треугольников каждый кадр
🟠 Среднее время кадра (движок на C): ~28 мс
🟠 Среднее время кадра (@unity): ~400 мс

Он использует однотредовую CPU-анимацию (так же, как Unity). Без GPU-инстансинга и VAT — каждый меш отрисовывается отдельным draw call

"Сейчас я упираюсь в пропускную способность GPU, что логично с учётом используемой реализации skinning'а.

Думаю, переход на GPU skinning даст мощный прирост производительности, но сначала придётся портировать рендеринг на WebGPU"


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1😈1