Функция CreateFileMapping может использоваться для выделения пространства в файле подкачки (если первый аргумент INVALID_HANDLE_VALUE
). Выделенное пространство позже может быть отображено в виртуальном адресном пространстве процесса.
Зачем мне это делать вместо использования VirtualAlloc ?
Кажется, что обе функции выполняют почти одно и то же. Память, выделенная VirtualAlloc, может в какой-то момент быть перенесена в файл подкачки. Зачем мне нужен API, который специально запрашивает, чтобы мои страницы размещались там в первую очередь? Почему меня должно волновать, где живут мои личные страницы?
Это просто подсказка ОС относительно моих ожидаемых схем использования памяти? (То есть, первый - это подсказка, чтобы более агрессивно выгружать эти страницы.)
Или это просто удобный метод при работе с очень большими наборами данных в 32-битных процессах? (То есть я могу использовать CreateFileMapping для выделения> 4 ГБ, а затем отображать в памяти меньшие куски пространства по мере необходимости. Использование файла подкачки избавляет меня от необходимости вручную управлять своим собственным набором файлов для «подкачки».)
PS. Этот вопрос вызван статьей, которую я недавно прочитал: http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx