Приложения обычно используют два уровня выделения памяти. Операционная система выделяет память для процесса в страницах.
Поскольку приложения обычно выделяют память в количествах, намного меньших, чем страница, они используют библиотечные функции (например, malloc) для выделения памяти из диспетчера кучи. Менеджер кучи в свою очередь выделяет память в страницах из операционной системы.
У вас есть примеры из обеих групп функций. VirtualAlloc и CreateFileMapping выделяют страницы памяти из операционной системы. Система виртуальной памяти требует резервного копирования страниц во вторичном хранилище. CreateFileMapping возвращает страницы в указанный вами файл. VirtualAlloc приведет к тому, что страницы будут поддерживаться файлом системной страницы.
Как правило, вы используете функции выделения страниц, когда вам нужно выделить большой объем памяти, например, массив размером 100 МБ для молекулярного моделирования.
HeapCreate используется для создания кучи для меньшего выделения памяти. HeapAlloc может быть использован для выделения памяти из кучи. Чаще всего программисты на C просто используют malloc / free. Тем не менее, Windoze позволяет вам определять свои собственные кучи для лучшего контроля. На земле Eunuchs вы обычно ссылаетесь в своей собственной реализации malloc / free, чтобы сделать то же самое.
Таким образом, ваш первый выбор - это схема выделения памяти, используемая языком программирования (например, new / delete, malloc / free).
Второй вариант - это функции API кучи (если предыдущие не соответствуют вашим потребностям).
Ваш третий выбор - функции выделения страниц.