Win32 asignación de memoria con gran alineación

Necesito asignar grandes regiones de memoria (megabytes) con grandes alineaciones (también potencialmente en el rango de megabytes). La familia de funciones de VirtualAlloc no parece proporcionar opciones para hacer esto.

Lo que hago en Linux para lograr esto es mapear una región más grande, lo suficientemente grande como para garantizar que se contendrá una región suficientemente grande con la alineación requerida, y luego mapear las regiones al principio y al final de la región grande que no son necesarios.

Como ejemplo, digamos que necesito 4 megabytes, alineados en un límite de 1 megabyte (es decir, el inicio de la región con ceros en los 20 bits más bajos). Mmap 5 megabytes. Digamos que obtengo la región 0x44ff000-0x49ff000. Dentro de esa región está contenida la región 0x4500000-0x4900000, que está alineada en un límite de 1 megabyte. Entonces munmap 0x44ff000-0x4500000 y 0x4900000-0x49ff000.

¿Puedo hacer algo similar en Win32? Si uso VirtualProtect con PAGE_NOACCESS, ¿se liberará la memoria? ¿Hay una mejor solución?

Respuestas a la pregunta(2)

Su respuesta a la pregunta