У C++ сегментна організація пам'яті відображає, як програма використовує пам'ять під час виконання. Пам'ять поділяється на кілька сегментів, кожен з яких виконує певну функцію. Основні сегменти:
1. Сегмент коду (Code Segment/Text Segment)
Цей сегмент містить машинний код програми, тобто виконувані інструкції. Він зазвичай має лише права читання та виконання, щоб захистити код від модифікацій.
У C++ функції, методи класів і статичні бібліотеки зберігаються в цьому сегменті.
2. Сегмент даних (Data Segment)
Цей сегмент ділиться на дві частини:
Ініціалізовані дані: для глобальних/статичних змінних, які мають початкові значення.
Неініціалізовані дані (BSS): для глобальних/статичних змінних, які не мають початкових значень (ініціалізуються як 0).
3. Купа (Heap)
Купа використовується для динамічного виділення пам'яті під час виконання програми. Пам'ять із купи потрібно виділяти вручну за допомогою new або malloc і звільняти за допомогою delete або free.
4. Стек (Stack)
Стек використовується для локальних змінних, викликів функцій, адрес повернення та параметрів функцій. Його пам'ять автоматично виділяється та звільняється.
5. Сегмент констант (Constant Segment)
Цей сегмент містить константи, наприклад, строки, визначені в коді. Він часто має права тільки на читання, щоб уникнути змін.
Ключові моменти:
1. Стек і Купа використовуються під час виконання програми. Переповнення стеку може спричинити помилку stack overflow.
2. Пам'ять у купі потрібно звільняти вручну, інакше виникає витік пам'яті.
3. Глобальні та статичні змінні зберігаються в сегменті даних.
4. Константні строки й інші літерали розміщуються в сегменті констант.

