Большинство думают, что корутины — это просто синтаксический сахар. На деле это хирургическая операция над указателем стека.
1. Сохраняет текущий RSP (указатель стека)
2. Копирует локальные переменные в heap-allocated фрейм
3. Переключает RSP на стек другой корутины
mov rsp, [coroutine_stack_ptr]
Процессор продолжает выполнение, но теперь все push/pop идут в другую область памяти. Регистры RBP, RIP тоже меняются — полная иллюзия «другой функции».
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8💯3❤2
🛠 restrict — keyword, которого нет в C++
Компилятор не может векторизовать, если боится, что указатели пересекаются.
❗️
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Компилятор не может векторизовать, если боится, что указатели пересекаются.
// ❌ Компилятор не знает, пересекаются ли a и b
void add(float* a, float* b, size_t n) {
for (size_t i = 0; i < n; ++i) {
a[i] += b[i]; // Что если a и b — один массив?
}
}
// ✅ Подсказываем компилятору (C++20)
void add(float* __restrict a, float* __restrict b, size_t n) {
for (size_t i = 0; i < n; ++i) {
a[i] += b[i]; // Теперь векторизуется!
}
}
// ✅ Или используйте std::span (C++20)
void add(std::span<float> a, std::span<float> b) {
std::transform(a.begin(), a.end(), b.begin(), a.begin(),
std::plus<>{}); // Векторизуется автоматически
}
restrict — это ключевое слово из C99 (стандарта языка C), которое не является частью стандарта C++.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔4
🐸 Подборка вакансий для C++-разработчиков за неделю
Middle/Senior C++ разработчик [ИРТЕЯ] — Удалёнка
Разработчик C++ — Офис (Москва)
Разработчик систем компьютерного зрения C++ — от 4000 и до 7000 $ Удалёнка
Senior Developer Rust/C++ — Офис (Москва)
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#вакансии
Middle/Senior C++ разработчик [ИРТЕЯ] — Удалёнка
Разработчик C++ — Офис (Москва)
Разработчик систем компьютерного зрения C++ — от 4000 и до 7000 $ Удалёнка
Senior Developer Rust/C++ — Офис (Москва)
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#вакансии
👍2
«Этот манёвр будет стоить нам 51 год...»
Разработчики на
До 19 января в Proglib Academy действуют старые условия:
— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования
Инвестировать в навыки
⚠️ Повышение цен уже 19 января
Разработчики на
C++ знают цену производительности. Оптимизируйте свой путь в обучении: забирайте курсы по архитектуре, алгоритмам и математике до того, как они подорожают.До 19 января в Proglib Academy действуют старые условия:
— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования
Инвестировать в навыки
⚠️ Повышение цен уже 19 января
❤3😁2
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
#include <iostream>
#include <thread>
#include <chrono>
struct Counter {
long long a;
long long b;
};
void increment(long long& val) {
for (int i = 0; i < 100'000'000; i++) val++;
}
int main() {
Counter cnt{ 0, 0 };
auto start = std::chrono::high_resolution_clock::now();
std::thread t1(increment, std::ref(cnt.a));
std::thread t2(increment, std::ref(cnt.b));
t1.join(); t2.join();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms\n";
return 0;
}
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1