Розуміння, як дані зберігаються в пам'яті, є важливим для ефективного програмування в C і C++. Структура та союзи є фундаментальними типами даних, які впливають на макет пам'яті і розмір. Ця стаття пояснює, як пам'ять виділено для цих типів даних і як правильно розрахувати їх розміри.

Схема розміщення пам'яті конструкцій

Структура в C і C++ є колекції змінних, можливо, різних типів, групованих разом під одним ім'ям. Компілятор виділяє пам'ять для структури, розміщуючи кожного учасника послідовно, з можливим наповнювачем для задоволення вимог вирівнювання.

Загальний розмір структури – сума розмірів її членів плюс будь-який наповнювач, що додається до вирівнювання. Підкладка забезпечує, що кожен учасник починає за адресою, що дівидіє за розмірами або вимогою вирівнювання.

Розміщення пам'яті союзів

Спілки схожі на структури, але відрізняються від розподілу пам'яті. Всі члени об'єднання поділяють однакові пам'ятки, які дорівнює розмірам свого найбільшого члена. Це дозволяє одночасно зайняти типи даних, які займають пам'ять.

Розмір об’єднання визначається найбільшим членом, а також можливого наповнення. Написання одного учасника впливає на дані інших членів, тому об’єднання використовуються для обміну даними пам’яті.

Розрахунок розмірів даних

Розрахунок розмірів конструкцій і об’єднань передбачає підведення розмірів окремих членів і з урахуванням насипу для вирівнювання. розмір оператор в С і С++ забезпечує загальний розмір в байтах.

Наприклад, розглянемо структуру з і . Розмір структури залежить від розміру , розмір , а також додається на вирівнювання. Аналогічно розмір об'єднання є розміром його найбільшого учасника.

  • для визначення загального розміру.
  • Розглянемо вимоги до вирівнювання кожного учасника.
  • Облік для набивання, доданого компілятором.
  • Пам'ятайте, що об'єднання діляться пам'яттю серед усіх членів.