我需要分配具有大对齐方式的大内存区域(兆字节)(也可能在兆字节范围内)。VirtualAlloc 系列函数似乎没有提供执行此操作的选项。
为了实现这一点,我在 Linux 上所做的是映射一个更大的区域 - 足够大以保证其中包含具有所需对齐的足够大的区域 - 然后 munmap 大区域开头和结尾的区域不需要。
例如,假设我需要 4 兆字节,在 1 兆字节边界上对齐(即,最低 20 位为零的区域的开始)。我会映射 5 兆字节。假设我得到区域 0x44ff000-0x49ff000。在该区域内包含区域 0x4500000-0x4900000,它在 1 兆字节边界上对齐。然后我会 munmap 0x44ff000-0x4500000 和 0x4900000-0x49ff000。
我可以在 Win32 上做类似的事情吗?如果我将 VirtualProtect 与 PAGE_NOACCESS 一起使用,内存会被释放吗?有更好的解决方案吗?