Стек — это динамическая структура данных, реализующая принцип LIFO (Last In, First Out). В контексте выполнения программы стек используется для хранения:
При вызове функции создается стековый кадр (stack frame) для этой функции. При завершении функции стековый кадр удаляется.
c
Выравнивание памяти (Memory Alignment)
Выравнивание памяти — это требование к адресу начала данных определенных типов быть кратным определенному числу, называемому границей выравнивания (alignment boundary).
Причины и следствия:
Компиляторы автоматически выравнивают данные, располагая их в памяти с учетом требований. Это может приводить к появлению промежутков выравнивания (padding) между членами структур или между объектами в массиве.
c
Без выравнивания MyStruct занимала бы 1 + 4 + 2 = 7 байт. На 32-разрядной архитектуре с выравниванием для int 4 байта:
| Член | Размер (байты) | Смещение (байты) |
|---|---|---|
c | 1 | 0 |
| Padding | 3 | 1-3 |
i | 4 | 4 |
s | 2 | 8 |
| Padding | 2 | 10-11 |
Общий размер структуры будет 12 байт.
В C++11 и более поздних версиях можно использовать alignas для указания минимального выравнивания:
c
Функция alignof(тип) возвращает требуемое выравнивание для типа.