Библиотека C/C++ разработчика | cpp, boost, qt
19.4K subscribers
2.01K photos
65 videos
16 files
4.29K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
🍿 std::start_lifetime_as vs std::launder: в чём разница?

Оба связаны с pointer provenance и strict aliasing, но решают разные проблемы.


🍴 std::launder — обход оптимизаций

Когда компилятор «знает» значение через const member или reference, он может закешировать его:

struct S { const int x; };
S* p = new (addr) S{42};
p->x; // Компилятор: "всегда 42"

new (p) S{100}; // Переиспользуем память
p->x; // Всё ещё 42? Нет, но компилятор так думает!

auto q = std::launder(p);
q->x; // Правильно: 100


launder заставляет компилятор перечитать значение из памяти, игнорируя предыдущие предположения.


🍬 start_lifetime_as — создание lifetime

Он нужен когда объекта физически нет, но память готова:

alignas(int) char buffer[sizeof(int)];
*reinterpret_cast<int*>(buffer) = 42; // UB: нет объекта

int* p = std::start_lifetime_as<int>(buffer);
*p = 42; // OK: объект создан



🏝 Вывод

launder — для существующих объектов с переписанной памятью. start_lifetime_as — для памяти, которая станет объектом.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍2👾1
😎 Топ-вакансий для C++ разработчиков за неделю

С++ разработчик — от 300 000 и до 350 000 ₽ Удалёнка
C developer (MES) — Офис (Новосибирск)

Middle C Developer — от 250 000 ₽ Удалёнка

✍️ Еще больше топовых вакансий — в нашем канале C++ jobs

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#буст
😁2
😼 Коротко о выравнивании в C++

💡 Автор статьи от PVS-Studio детально разбирает, как компилятор на самом деле размещает данные в памяти и почему это критично для производительности.

Ключевые моменты статьи:

• естественное выравнивание и паддинги между переменными
• влияние порядка полей в структурах на итоговый размер
• директива #pragma pack и её опасные последствия
• alignas, alignof и компиляторо-специфичные атрибуты

Основной фокус — практические примеры расположения данных в памяти с детальными схемами и сравнением поведения MSVC и Clang.

Вы узнаете, что один и тот же код может занимать разное количество памяти в зависимости от порядка объявления полей, а неправильное использование #pragma pack может привести к аппаратным прерываниям на ARM архитектуре вместо ожидаемой экономии памяти.

👉 Статья

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#буст
👍7