Alocação de memória Win32 com grande alinhamento

Preciso alocar grandes regiões de memória (megabytes) com grandes alinhamentos (também potencialmente na faixa de megabytes). A família de funções VirtualAlloc parece não oferecer opções para fazer iss

que eu faço no Linux para conseguir isso é mapear uma região maior - grande o suficiente para garantir que uma região suficientemente grande com o alinhamento necessário esteja contida nela - e depois mapear as regiões no início e no final da região grande isso não é necessário.

Como exemplo, digamos que eu precise de 4 megabytes, alinhados em um limite de 1 megabyte (ou seja, o início da região com zeros nos 20 bits mais baixos). Eu mmap 5 megabytes. Digamos que eu recebo a região 0x44ff000-0x49ff000. Dentro dessa região está contida a região 0x4500000-0x4900000, alinhada em um limite de 1 megabyte. Gostaria então de munmap 0x44ff000-0x4500000 e 0x4900000-0x49ff000.

Posso fazer algo semelhante no Win32? Se eu usar o VirtualProtect com PAGE_NOACCESS, a memória será liberada? Existe uma solução melhor

questionAnswers(2)

yourAnswerToTheQuestion