#полезное
😇 Я недавно нашёл классный способ поддерживать "лямбды" в C
Без аллокаций, работает с любым типом массива, "автоматический захват" переменных, поскольку это просто простая генерация кода
На втором фото несколько примеров с однострочными, многострочными и с "захваченными" переменными
На 3 фото пример использован в реальном коде (адаптирован под кастомный тип массива, который просто ptr + len)
👉 Новости 👉 База вопросов
Без аллокаций, работает с любым типом массива, "автоматический захват" переменных, поскольку это просто простая генерация кода
На втором фото несколько примеров с однострочными, многострочными и с "захваченными" переменными
На 3 фото пример использован в реальном коде (адаптирован под кастомный тип массива, который просто ptr + len)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #Cplus
🤔 Что такое прототип функции в С++?
Прототип функции в С++ — это декларация функции, которая указывает ее имя, тип возвращаемого значения и типы параметров. Это позволяет компилятору проверять правильность вызова функции до ее определения.
👉 Новости 👉 База вопросов
Прототип функции в С++ — это декларация функции, которая указывает ее имя, тип возвращаемого значения и типы параметров. Это позволяет компилятору проверять правильность вызова функции до ее определения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
#полезное
🤯 std::indirectly_
readable_traits
👉 Новости 👉 База вопросов
readable_traits
std::indirectly_readable_traits (C++20) используется внутри концептов и обобщённых алгоритмов для извлечения типа значения, на который "указывает" итератор или указатель. Это полезно при написании обобщённых (generic) алгоритмов и своих концептов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
#полезное
🛞 Создание простого клиент-серверного приложения на UDP в C
Здесь мы рассмотрим, как настроить базовый UDP-сервер и клиент на языке C, сосредоточив внимание на механике работы за кулисами - гайд
👉 Новости 👉 База вопросов
Здесь мы рассмотрим, как настроить базовый UDP-сервер и клиент на языке C, сосредоточив внимание на механике работы за кулисами - гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡1❤1
#полезное
🥄 Напоминание: лучший способ чему-либо научиться — делать собственные проекты.
Этот репозиторий содержит большинство проектов, какие только можно представить, и множество языков для их реализации.
Многие из них — на C, другие — на Assembly, и каждый из них даст вам мощную прокачку.
👉 Новости 👉 База вопросов
Этот репозиторий содержит большинство проектов, какие только можно представить, и множество языков для их реализации.
Многие из них — на C, другие — на Assembly, и каждый из них даст вам мощную прокачку.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #Cplus
🤔 Расскажите про стек в контексте С++
Стек в С++ - это адаптер контейнера, работающий по принципу LIFO (Last In, First Out), где последний элемент, добавленный в стек, будет первым, который из него извлечет.
👉 Новости 👉 База вопросов
Стек в С++ - это адаптер контейнера, работающий по принципу LIFO (Last In, First Out), где последний элемент, добавленный в стек, будет первым, который из него извлечет.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😎 Представьте себе написание сложной разветвлённой логики без единого оператора
Можешь ознакомиться с этим гайдом о сопоставлении с образцом
👉 Новости 👉 База вопросов
if. Я уже некоторое время работаю с сопоставлением с образцом, но с новым языком, не C/C++Можешь ознакомиться с этим гайдом о сопоставлении с образцом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🥺 Сегодня получил интересный вопрос: что быстрее —
Ответ: n++ читает стек 3 раза, в то время как ++n и n + 1 — 4 раза.
Тесты были проведены на следующем коде (смотри фото):
++n и n + 1
Для
> n инкрементируется на стеке
> значение n загружается в регистр
> регистр сохраняется в dummy на стеке
n++
Для
> n загружается в регистр-1
> регистр-1 инкрементируется и результат сохраняется в регистр-2
> регистр-2 сохраняется обратно на стек (обновлённое значение n)
> регистр-1 сохраняется на стек в dummy (исходное значение n)
Может показаться, что код для n++ содержит больше инструкций и поэтому должен быть медленнее, но это не так.
На практике не существует такого понятия, как «инкремент на стеке» — значение фактически загружается в процессор, инкрементируется там, а затем записывается обратно.
Если посчитать обращения к стеку (чтения и записи):
> ++n и n + 1: чтение, запись, чтение, запись — 4 обращения к стеку
> n++: чтение, запись, запись — 3 обращения к стеку
Поскольку чтение из регистра значительно быстрее, чем из стека, это делает n++ более быстрым вариантом.
👉 Новости 👉 База вопросов
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.
👉 Новости 👉 База вопросов
Исключение в С++ - это обьект, который выбрасывается во время выполнения программы, когда возникает необычная ситуация или ошибка. Исключения обрабатываются с помощью блока 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, если последний символ должен быть однобитным.
Пример:
👨💻 Алгоритм:
1⃣ Инициализируйте индекс для итерации по массиву.
2⃣ Пройдите по массиву, увеличивая индекс на 1, если текущий бит равен 0, и на 2, если текущий бит равен 1.
3⃣ Проверьте, достиг ли индекс последнего элемента массива, и верните результат.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 717. 1-bit and 2-bit Characters
У нас есть два специальных символа: первый символ может быть представлен одним битом 0. Второй символ может быть представлен двумя битами (10 или 11). Если задан двоичный массив bits, который заканчивается 0, верните true, если последний символ должен быть однобитным.
Пример:
Input: bits = [1,0,0]
Output: true
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
#полезное
👋 Изучай разработку ОС, это реально увлекательно
Функция
Когда выполнение доходит до brk, обработчик перехватывает исключение, получает доступ к регистрам потока, модифицирует x0, подставляя нужное значение возврата, продвигает счётчик инструкций, чтобы пропустить ловушку, и выполнение продолжается.
В комбинации с остальной частью моего кода это обеспечивает патчинг во время выполнения, интроспекцию ВМ и метаморфное выполнение кода.
👉 Новости 👉 База вопросов
Функция
breakpoint_handler() устанавливает обработчик исключений, который перехватывает инструкции brk, выполняемые внутри целевого процесса. Здесь написана отдельная функция patch(), — она внедряет трамплин в исполняемую область памяти, и этот трамплин содержит инструкцию brk в качестве ловушки.Когда выполнение доходит до brk, обработчик перехватывает исключение, получает доступ к регистрам потока, модифицирует x0, подставляя нужное значение возврата, продвигает счётчик инструкций, чтобы пропустить ловушку, и выполнение продолжается.
В комбинации с остальной частью моего кода это обеспечивает патчинг во время выполнения, интроспекцию ВМ и метаморфное выполнение кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1🔥1
#полезное
❤️🔥 Чувак оптимизировал умножение матриц на C с использованием SIMD, блочной работы с кэшем и многопоточности, сократив время выполнения в 80 раз.
Репозиторий на GitHub
👉 Новости 👉 База вопросов
Репозиторий на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😈3❤2🔥1
#Собес #Cplus
🤔 Что такое аргумент по умолчанию в функции?
Аргумент по умолчанию в функции С++ — это параметр, которому присваивается значение по умолчанию. Если вызывающая сторона не передает значение для этого параметра, будет использовано значение по умолчанию.
👉 Новости 👉 База вопросов
Аргумент по умолчанию в функции С++ — это параметр, которому присваивается значение по умолчанию. Если вызывающая сторона не передает значение для этого параметра, будет использовано значение по умолчанию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1