У меня есть этот тонкий вопрос о виртуальной памяти. В одной книге я прочитал эту цитатуоб виртуальной памяти
Когда файл ELF выполняются, текст и два сегмента данных загружаются на отдельную области виртуальной памяти
Но если мы, например, компилировать C программа, состоящая из двух исходных файлов без связывания, создаст два объектных файла. И в обоих объектных файлах адресация начинается с нуля. Затем, если мы свяжем оба объектных файла с одним исполняемым и проверим его, мы заметим, что адресация больше не начинается с нуля, а некоторый адрес уже назначается каждому из сегментов. И, как я понимаю, этот назначенный адрес является адресом виртуальной памяти. Поэтому у меня есть два вопроса:
- Я исправлю, что это компоновщик, который запрашивает некоторый диапазон виртуальной памяти от ОС и назначает его сегментам программ?
- Что означает автор цитаты, когда он сказал, что виртуальный адрес назначается при выполнении процесса?
Спасибо за ответ, может быть, вы знаете, какие системные вызовы используются компоновщиком для запроса этого виртуального адреса, который служит базой? –
Я не на 100% компетентен в этой области, но, насколько я понимаю, компоновщик назначает собственный произвольный виртуальный адрес без необходимости запрашивать его у операционной системы. – ExtremeCoder