Типичный процесс имеет отображения кода, констант, данных, heap, stacks и библиотек. Инициализированные данные обычно хранятся в файле, а нулевые данные могут описываться только размером.
Назовите области памяти процесса и объясните, как инициализированные и неинициализированные глобальные данные влияют на размер исполняемого файла.
Типичный процесс имеет отображения кода, констант, данных, heap, stacks и библиотек. Инициализированные данные обычно хранятся в файле, а нулевые данные могут описываться только размером.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Типичный процесс имеет отображения кода, констант, данных, heap, stacks и библиотек. Инициализированные данные обычно хранятся в файле, а нулевые данные могут описываться только размером.
В ELF код часто расположен в .text, константы — .rodata, изменяемые данные с ненулевыми начальными значениями — .data. .bss обычно описывает память для нулевой инициализации без хранения всех нулей на диске.
Например, большой глобальный массив без явных значений увеличивает потребность в виртуальной памяти, но не обязан увеличивать файл на свой полный размер. Массив с явными ненулевыми данными обычно требует соответствующего содержимого в файле. Компилятор и линкер могут оптимизировать неиспользуемые объекты.
Секции удобны для компоновки; загрузчик отображает сегменты из program headers. Heap и stacks — области выполнения, а не просто секции исполняемого файла.
Источник: man7.org.