С/С++ Portal | Программирование
15K subscribers
563 photos
99 videos
14 files
542 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика

Связь: @devmangx

РКН: https://clck.ru/3Foc4d
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++ более быстрым вариантом. 🐸

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Представьте себе игру, в которой вся логика выполняется на этапе компиляции:

никакой обработки во время выполнения, никакого динамического выделения памяти — только чистая магия constexpr

Автор реализовал игру в стиле «три в ряд» (аналогичную Candy Crush Saga) с использованием исключительно возможностей компиляции C++17 - смотреть 😨

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

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

Источник

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Изучай разработку ОС, это реально увлекательно

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

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

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

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Чувак оптимизировал умножение матриц на C с использованием SIMD, блочной работы с кэшем и многопоточности, сократив время выполнения в 80 раз.

Репозиторий на GitHub прикрепил 😡

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Обратите внимание на интересную статью Ульриха Дреппера, в которой рассматриваются системы компьютерной памяти и их значение для разработчиков программного обеспечения.

Понимание этих концепций критически важно, если вы стремитесь создавать высокоэффективное ПО.

В статье рассматриваются:

> Кэш-память CPU — зачем она нужна и как оптимизировать её использование для ускоренного доступа к данным.

> Виртуальная память — как происходит управление памятью на низком уровне и что это означает для ваших приложений.

> Шаблоны доступа к памяти — ключ к написанию эффективного кода заключается в понимании иерархии памяти.

> Инструменты для анализа производительности — практические советы по использованию инструментов для выявления и устранения узких мест, связанных с памятью.

> Блокировки (locks) — понимание влияния многопоточности на работу с памятью.

> Многопоточность и память — как неравномерный доступ к памяти (NUMA) влияет на производительность программ на современных многопроцессорных системах.

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

Это обязательный материал для разработчиков, стремящихся к низкоуровневым оптимизациям 💯

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
На заметку вам: roadmap.sh/cpp

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

🚶‍♀️🚶‍♀️🚶‍♀️

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание игр заставляет осваивать новые технологии и решать реальные задачи. 😳

В этом курсе Эрик Юзва показывает, как с помощью C и Raylib сделать игру в стиле match-3 с графикой, музыкой и системой очков

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Архитектура компьютера: Продвинутое проектирование процессоров

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

Источник

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Хочешь понять, как работает Redis изнутри? Этот проект — пошаговая реализация Redis-подобного key-value сервера на C:

> Часть 1: от echo-сервера → полноценный SET/GET Redis-сервер

> Часть 2: глубокие структуры данных и продвинутая логика 😎

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Нашёл репозиторий с кучей небольших упражнений и проектов по программированию, чтобы помочь тебе начать с языка C. Отлично подойдёт для новичков — пользуйся 🧠

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот «Реверс-инжиниринг для всех». Эта отличная небольшая онлайн-книга обучает реверс-инжинирингу и заодно предлагает одно из лучших руководств по ассемблеру, которые я встречал. Уже ради этого стоит её прочитать — попробуйте 😱

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

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

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
Создан терминальный MP3-плеер с визуализацией спектра в виде радужного спектра в реальном времени.

Это реализовано через обработку аудио в реальном времени — вычисляются 32 частотные полосы, каждая из которых отображается с помощью HSV-цветов 🙂

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM