Мэппинг EXE в память
Есть пара вопросов по работе с памятью и о памяти. Надеюсь, поможете разобраться :)
Дж. Рихтер "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Цитата:
При запуске загрузчик операционной системы выполняет следующие операции:
1.Загрузчик операционной системы создает виртуальное адресное пространство для нового процесса и проецирует на него исполняемый модуль.
2. <...>
1.Загрузчик операционной системы создает виртуальное адресное пространство для нового процесса и проецирует на него исполняемый модуль.
2. <...>
Интересует следующее:
Цитата:
...создает виртуальное адресное пространство для нового процесса и проецирует на него исполняемый модуль.
Я как понимаю...
Предположим у нас машина с ОЗУ 512 Мб. 512 Мб свободно.
Запускаем somefile.exe размером 10 Мб.
Создается процесс. У него виртуальная память 4 Гб. Вся свободная.
В ней выделяется 10 Мб адрессного пространства под код и данные того же размера(10 Мб).
Вопрос: сколько ОЗУ памяти будет свободно после запуска? 502 Мб и файл somefile.exe будет переписан непосредственно в ОЗУ?
Или 512, а 10 Мб с винчестера(содержащие exe-файл) будут использоваться как будто они в ОЗУ памяти?
после запуска будет свободно 502 мегабайта физической памяти. Если какой либо программе потребуется больше памяти, то память процесса будет сброшена в файл подкачки, при надобности она будет снова загружена в память, а другая выгружена.
а возможно, что будет загруженна определенная "порция" кода (скажем 5 Мб), а другие 5 Мб виртуальной памяти не будут связаны с физической? И при обращении к одной из функциий, отсутствующей в физической памяти, возбудится исключение, которое заставит загрузчик отобразить оставшиеся 5 мб на физ. память и "перезапустить" обращение к функции?
И такой вариант возможен.
тогда какая часть программы подгружается всегда? т.е. каково минимальное кол-во кода и данных для запуска?
страница секции кода в которой находится точка входа в любом случае будет загружена одна из первых
спасибо