о виртуальной памяти - PullRequest
3 голосов
/ 06 января 2012

У меня есть этот тонкий вопрос о виртуальной памяти.В одной книге я прочитал эту цитату

Когда исполняется файл ELF, текст и два сегмента данных загружаются в отдельные области виртуальной памяти

Но если мынапример, компиляция программы на C, состоящей из двух исходных файлов, без ссылки на нее создаст два объектных файла.И в обоих объектных файлах адресация начинается с нуля.Затем, если мы свяжем оба объектных файла в один исполняемый файл и проверим его, мы увидим, что адресация больше не начинается с нуля, а некоторый адрес уже назначен каждому из сегментов.И, как я понимаю, этот назначенный адрес является адресом виртуальной памяти.Итак, у меня есть два вопроса:

  1. Итак, я прав, что именно компоновщик запрашивает некоторый диапазон виртуальной памяти у ОС и назначает его сегментам программы?
  2. Что означает автор цитаты, когда говорит, что виртуальный адрес назначается при выполнении процесса?

1 Ответ

3 голосов
/ 06 января 2012

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

...