gpt4 book ai didi

c++ - 如何获取在对 VirtualAlloc 的初始分配调用中保留的区域大小

转载 作者:可可西里 更新时间:2023-11-01 10:37:52 25 4
gpt4 key购买 nike

在 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 的整个区域大小

最佳答案

MEMORY_BASIC_INFORMATION :

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/

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