Чтобы понять, на каком этапе распределяется память под статические данные, давайте рассмотрим каждый из предложенных этапов:
- Компоновка программы: На этом этапе происходит объединение всех объектных файлов в один исполняемый файл. Здесь происходит связывание различных модулей программы и решение, какие функции и переменные будут доступны. Однако, память под статические данные еще не распределяется на этом этапе.
- Компиляция программы: На этапе компиляции происходит преобразование исходного кода в объектный код. Во время компиляции компилятор может определить, какие данные будут статическими, но фактическое распределение памяти не происходит. Это лишь подготовительный этап.
- Выполнение программы: На этом этапе программа уже запущена, и операционная система выделяет память для всех необходимых данных. Статические данные, такие как глобальные переменные и константы, выделяются именно здесь, в процессе выполнения, когда программа загружается в память.
Таким образом, правильный ответ на ваш вопрос: память под статические данные распределяется на этапе выполнения программы.