我需要分配大内存区(兆字节)大对齐(也可能在兆字节范围内)。 VirtualAlloc系列函数似乎没有提供选项来执行此操作。Win32内存分配与大对齐
我在Linux上做什么来达到这个目的是为了映射一个更大的区域 - 足够大以保证具有所需对齐的足够大的区域将被包含在其中 - 然后在区域的开始和结束处munmap大的地区是不需要的。作为一个例子,假设我需要4兆字节,在1兆字节边界上对齐(即,在最低20位中具有零的区域的开始)。我会mmap 5兆字节。比方说,我得到区域0x44ff000-0x49ff000。在该区域内包含区域0x4500000-0x4900000,该区域在1兆字节的边界上对齐。然后,我会munmap 0x44ff000-0x4500000和0x4900000-0x49ff000。
我可以在Win32上做类似的事吗?如果我用PAGE_NOACCESS使用VirtualProtect,内存是否会被释放?有更好的解决方案吗?
对* virtual *内存的对齐要求非常奇怪,这只对物理内存很重要。 Anyhoo,在Windows上无法做到。但这并不重要,因为您只需*保留*分配。承诺是一个单独的步骤。请求分配特定开心地址也是可能的。使用VirtualAlloc()。 –