gpt4 book ai didi

winapi - Win32 大对齐内存分配

转载 作者:行者123 更新时间:2023-12-02 09:26:58 32 4
gpt4 key购买 nike

我需要分配具有大对齐方式的大内存区域(兆字节)(也可能在兆字节范围内)。 VirtualAlloc 系列函数似乎没有提供执行此操作的选项。

为了实现这一点,我在 Linux 上所做的就是 mmap 一个更大的区域 - 大到足以保证其中包含具有所需对齐方式的足够大的区域 - 然后 munmap 开头和结尾的区域不需要的大区域。

举个例子,假设我需要 4 MB,在 1 MB 边界上对齐(即该区域的开头最低 20 位为零)。我会 mmap 5 MB。假设我得到了区域 0x44ff000-0x49ff000。该区域内包含区域 0x4500000-0x4900000,该区域在 1 MB 边界上对齐。然后我会 munmap 0x44ff000-0x4500000 和 0x4900000-0x49ff000。

我可以在 Win32 上做类似的事情吗?如果我将 VirtualProtect 与 PAGE_NOACCESS 一起使用,内存会被释放吗?有更好的解决办法吗?

最佳答案

是的,您可以使用相同的技术。 VirtualAlloc 的范围较大,如 MEM_RESERVE。找到适当对齐的子范围,并使用 MEM_COMMIT 在该子范围上再次调用 VirtualAlloc

关于winapi - Win32 大对齐内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616719/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com