作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 VirtualFree 的 msdn 文档中
BOOL WINAPI VirtualFree(
_In_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD dwFreeType
);
dwSize [输入]要释放的内存区域的大小,以字节为单位。
如果 dwFreeType 参数是 MEM_RELEASE,这个参数必须是 0(零)。该函数释放在对 VirtualAlloc 的初始分配调用中保留的整个区域。
好像系统可以通过地址获取整个区域的大小
我的问题是: 我该怎么做(通过地址获取整个区域大小)
PS:VirtualQuery API 不能那样做
void* p = VirtualAlloc(null, static_cast
(_K * 128), MEM_RESERVE, PAGE_NOACCESS);
p = VirtualAlloc(p, _K * 64, MEM_COMMIT, PAGE_READWRITE);
MEMORY_BASIC_INFORMATION 我;
VirtualQuery(p, &im, sizeof(im));
im.RegionSize 是 MEM_COMMIT 的大小,不是第一次调用 VirtualAlloc 的整个区域大小
最佳答案
AllocationBase
A pointer to the base address of a range of pages allocated by the VirtualAlloc function. The page pointed to by the BaseAddress member is contained within this allocation range.
继续查询,直到你掉下边缘:
void* p = VirtualAlloc(NULL, static_cast<SIZE_T>(_K * 128), MEM_RESERVE, PAGE_NOACCESS);
void* p2 = VirtualAlloc(p, _K * 64, MEM_COMMIT, PAGE_READWRITE);
MEMORY_BASIC_INFORMATION im;
VirtualQuery(p2, &im, sizeof(im));
while (im.AllocationBase == p)
{
p2 = (unsigned char *)p2 + im.RegionSize;
VirtualQuery(p2, &im, sizeof(im));
}
关于c++ - 如何获取在对 VirtualAlloc 的初始分配调用中保留的区域大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065097/
我是一名优秀的程序员,十分优秀!