Структура программы
Во время выполнения, все данные о программе хранятся в оперативной памяти. Операционная система может у становить разные возможности по доступу к различным областям памяти (например, область может быть доступна только для чтения).
Операционные системы выстраивают виртуальное адресное пространство пользовательской задачи, разделив его на 4 секции.
Секция кода
В ней хранится машинный код для исполнения. Доступна только для чтения.
Секция данных
Содержит глобальные переменные, для которых в программе задано начальное значение. Образ секции должен хранится в исполняемом файле.
Секция неициализированных данных
Часто ещё называют секция BSS (Blank Static Storage). Предназначена для переменных, чьё значение не задано. В исполняемом файле хранится только размер секции.
Принципиальное отличие от секции данных заключается в том, что по ходу выполнения программы размер секции BSS может увеличиваться, что позволяет создавать новые переменные на этапе выполнения. Выделение дополнительной памяти осуществляется с помощью системных вызовов.
Секция стека
Используется для хранения локальных переменных в подпрограммах и адресов возврата из подпрограмм. Исполняемый файл не содержит никакой информации о секции стека.
Источник: Столяров — Программирование, том 2, раздел 3.3.2.