【发布时间】:2013-02-10 11:40:03
【问题描述】:
在 VirtualFree 的 msdn 文档中
BOOL WINAPI VirtualFree(
_In_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD dwFreeType
);
dwSize [in] 要释放的内存区域的大小,以字节为单位。
如果 dwFreeType 参数为 MEM_RELEASE,则此参数必须为 0(零)。该函数释放在对 VirtualAlloc 的初始分配调用中保留的整个区域。
好像系统可以通过地址得到整个区域的大小
我的问题是: 我该怎么做(通过地址获得整个区域大小)
PS : VirtualQuery API 无法做到这一点
void* p = VirtualAlloc(null, static_cast<SIZE_T>(_K * 128), MEM_RESERVE, PAGE_NOACCESS);
p = VirtualAlloc(p, _K * 64, MEM_COMMIT, PAGE_READWRITE);
MEMORY_BASIC_INFORMATION im;
VirtualQuery(p, &im, sizeof(im));
im.RegionSize 是 MEM_COMMIT 的大小,而不是第一次调用 VirtualAlloc 的整个区域大小
【问题讨论】:
-
这听起来像是一个 XY 问题,所以我想知道您是否可以稍微扩展一下您实际想要实现的目标?