Мне нужно выделить большие области памяти (мегабайты) с большими выравниваниями (также потенциально в диапазоне мегабайт). Семейство функций VirtualAlloc, похоже, не предоставляет возможности сделать это.
Что я делаю в Linux, чтобы добиться этого, так это отобразить больший регион - достаточно большой, чтобы гарантировать, что в нем будет содержаться достаточно большой регион с требуемым выравниванием - и затем отобразить регионы в начале и в конце большой регион, который не нужен.
В качестве примера, скажем, мне нужно 4 мегабайта, выровненных по границе 1 мегабайт (то есть начало области, имеющей нули в младших 20 битах). Я бы mmap 5 мегабайт. Допустим, я получаю регион 0x44ff000-0x49ff000. Внутри этого региона содержится область 0x4500000-0x4900000, которая выровнена по границе в 1 мегабайт. Я бы тогда munmap 0x44ff000-0x4500000 и 0x4900000-0x49ff000.
Могу ли я сделать что-то подобное на Win32? Если я использую VirtualProtect с PAGE_NOACCESS, будет ли освобождена память? Есть ли лучшее решение?