我需要知道总的提交内存大小(共享和私有(使用PagefileUsage
从PROCESS_MEMORY_COUNTERS_EX
中提取私有I我如何知道进程的(总(共享内存?
通常,共享内存的过程是:CreateFileMapping
创建一个共享内存空间;OpenFileMapping
打开共享内存并返回一个HANDLE句柄;MapViewOfFile获取映射到程序的内存,该内存可以读取和写入。
在MapViewOfFile的MSDN中:要获取视图的大小,请使用VirtualQuery函数。VirtualQuery
函数的返回值表示实际填充到第二个参数的大小,而不是内存的大小。实际内存信息在填充后的第二个参数中查看
SIZE_T VirtualQuery(
LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
SIZE_T dwLength
);
这是代码:
HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1000, NULL);
PVOID pData = MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
MEMORY_BASIC_INFORMATION mem_info;
int nBufferSize = VirtualQuery(pData, &mem_info, sizeof(mem_info));
UnmapViewOfFile(pData); //you could place a breakpoint here
CloseHandle(hMap);
断点触发时,检查mem_info
的内存数据,特别注意结构中的RegionSize
成员。
系统内存是根据粒度作为最小单元进行分配的。32位系统的正常粒度是4kb,因此成功应用后的内存通常是4kb的整数倍。因此,上面的代码适用于1000字节,但系统实际上分配了4kb。