@Venot

Сегменты данных, кода это разделение для ассемблера или так хранится в машинном коде?

На ассемблере в программе есть раздел .text, .bss, .data. Понимаю там хранятся данные и код программы, интересно при компиляции в машинный код там тоже так на сегменты разбит для выполнения процессором или это просто для удобства синтаксиса?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
На ассемблере в программе есть раздел .text, .bss, .data

Обычно эти разделы называют секциями а не сегментами. Потому что в ELF-файлах сегменты тоже есть, но у них нет имён.
при компиляции в машинный код там тоже так на сегменты разбит

Разбит, да. А при линковке некоторые секции можно объединить. Обычно неизменные секции (например .text, .rodata, .tls) объединяют в одну кучу, а все изменяемые (например .bss, .data) объединяют в другую кучу. На "больших" ОС (типа linux) эти кучи эти выравнивают по границе страницы и делают неизменные секции доступными только для чтения. Это помогает сэкономить память и использовать одни и те же страницы для представления неизменных данных в разных процессах.

для выполнения процессором

Процессору по большому счёту всё равно как расположено в памяти то, что он выполняет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы