Какова цель размещения страниц в файле подкачки с помощью CreateFileMapping? - PullRequest
3 голосов
/ 21 ноября 2008

Функция CreateFileMapping может использоваться для выделения пространства в файле подкачки (если первый аргумент INVALID_HANDLE_VALUE). Выделенное пространство позже может быть отображено в виртуальном адресном пространстве процесса.

Зачем мне это делать вместо использования VirtualAlloc ?

Кажется, что обе функции выполняют почти одно и то же. Память, выделенная VirtualAlloc, может в какой-то момент быть перенесена в файл подкачки. Зачем мне нужен API, который специально запрашивает, чтобы мои страницы размещались там в первую очередь? Почему меня должно волновать, где живут мои личные страницы?

Это просто подсказка ОС относительно моих ожидаемых схем использования памяти? (То есть, первый - это подсказка, чтобы более агрессивно выгружать эти страницы.)

Или это просто удобный метод при работе с очень большими наборами данных в 32-битных процессах? (То есть я могу использовать CreateFileMapping для выделения> 4 ГБ, а затем отображать в памяти меньшие куски пространства по мере необходимости. Использование файла подкачки избавляет меня от необходимости вручную управлять своим собственным набором файлов для «подкачки».)

PS. Этот вопрос вызван статьей, которую я недавно прочитал: http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx

Ответы [ 2 ]

3 голосов
/ 21 ноября 2008

Из функции CreateFileMapping:

A single file mapping object can be shared by multiple processes.

Можно ли разделить виртуальную память между несколькими процессами?

1 голос
/ 21 ноября 2008

Одной из причин является разделение памяти между различными процессами. Различные процессы, зная только имя отображаемого объекта, могут взаимодействовать через файл подкачки. Это предпочтительнее, чем создание реального файла и выполнение коммуникаций. Конечно, могут быть и другие варианты использования. Вы можете обратиться к Использование сопоставления файлов для IPC на MSDN для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...