Почему CreateFileMapping и MapViewOfFile вместо одной функции объединяют в себе функциональность двух? - PullRequest
2 голосов
/ 05 февраля 2012

Может ли кто-нибудь объяснить мне обоснование наличия этих двух функций вместо одной с объединенной функциональностью?

Есть ли случаи, когда эти двое не используются в качестве крепкой пары?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2012

Причиной наличия различных функций является то, что помимо определения однородных параметров, таких как параметры для страницы и кэша, CreateFileMapping() может использоваться для блокировки файла / диапазона, который больше доступного адресного пространства. MapViewOfFile() может затем разместить и сместить поддиапазон соответствующим образом, чтобы сделать фактическое содержимое доступным в адресном пространстве.

2 голосов
/ 05 февраля 2012

Поскольку это отключило бы важный сценарий использования, сопоставление файла больше, чем объем виртуальной памяти, который вы готовы потратить.

Или есть в наличии. Фрагментация адресного пространства накладывает ограничение на размер представления, которое вы можете создать, поскольку для одного представления требуется непрерывный диапазон адресов. В 32-разрядной версии Windows размер около 650 мегабайт. Полностью зависит от того, какие библиотеки были загружены и количество созданных куч. Создание нескольких представлений также вполне разумно.

Вы можете легко написать небольшую вспомогательную функцию, чтобы объединить их.

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