TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #3032 1.93K
C++: Расположение данных в памяти и директивы компилятора
(продолжение предыдущего поста)

Визуализация показывает, как три директивы компилятора C++ существенно изменяют размер и организацию простой структуры данных, управляя выравниванием и добавлением отступов в памяти.

Разница между стандартным (8 байт) и упакованным (5 байт) расположением критически важна для производительности и передачи данных!

Варианты расположения данных:

- Стандартное (Default): естественное выравнивание. После типа char добавляются 3 байта отступа, чтобы выровнять тип int по границе в 4 байта.
Размер: 8 байт.

- Упакованное (Packed): отступы не добавляются. Тип int начинается сразу после char, но для доступа к невыровненным полям может потребоваться несколько инструкций процессора — это сводит на нет выгоду от экономии памяти.
Размер: 5 байт.

- Выровненное (Aligned): заданное выравнивание (например, aligned(16) или aligned(32)) может добавлять значительные отступы в конце, чтобы гарантировать, что последующие структуры начинаются с требуемой границы.

Почему расположение данных компилятором имеет значение:

- Сетевые протоколы: использует упакованные структуры для минимального «формата передачи», чтобы не отправлять лишние байты отступов.

- Аппаратные интерфейсы: применяет конкретное выравнивание для ввода‑вывода с отображением в память, когда аппаратное обеспечение ожидает данные на определённых границах.

- Оптимизация производительности: использует выровненный доступ для векторизации (SIMD), чтобы ускорить обработку данных.

- Кроссплатформенная совместимость: обеспечивает согласованное размещение памяти при компиляции кода на разных архитектурах.
Telegram METANIT.COM C++: Расположение данных в памяти и директивы компилятора (продолжение в следующем посте)
  • 👍 8
  • ❤ 2
  • 👏 1
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →