Распределение памяти Win32 с большим выравниванием

Мне нужно выделить большие области памяти (мегабайты) с большими выравниваниями (также потенциально в диапазоне мегабайтов). Семейство функций VirtualAlloc, кажется, не предоставляет возможности сделать это.

Что я делаю в Linux, чтобы добиться этого, так это отобразить больший регион - достаточно большой, чтобы гарантировать, что в нем будет содержаться достаточно большой регион с требуемым выравниванием - и затем отобразить регионы в начале и в конце большого региона, который не нужны.

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

Можно ли сделать что-то похожее на Win32? Если я использую VirtualProtect с PAGE_NOACCESS, будет ли освобождена память? Есть ли лучшее решение?

Ответы на вопрос(2)

Ваш ответ на вопрос