Windows10下C++ WinAPI获取当前进程内存占用的最简方法咨询
Windows 10下C++获取当前进程内存占用的最简WinAPI方案
最简便的方案:使用GetProcessMemoryInfo
这是WinAPI中直接高效的原生方法,无需遍历堆结构,一次调用就能获取当前进程的核心内存指标,完美避开WMI或外部进程的低效问题,比你提到的HeapWalk/HeapSize简便得多。
实现步骤:
- 通过
GetCurrentProcess()获取当前进程句柄(无需额外权限); - 调用
GetProcessMemoryInfo,传入进程句柄和PROCESS_MEMORY_COUNTERS_EX结构体; - 从结构体中提取所需的内存数据(如私有字节、工作集大小等)。
完整代码示例:
#include <windows.h> #include <psapi.h> #include <iostream> #pragma comment(lib, "psapi.lib") int main() { // 获取当前进程句柄 HANDLE hProcess = GetCurrentProcess(); PROCESS_MEMORY_COUNTERS_EX pmc; // 调用API获取内存统计信息 if (GetProcessMemoryInfo(hProcess, (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc))) { // 输出常用内存指标 std::cout << "当前进程私有字节(Private Bytes):" << pmc.PrivateUsage / 1024 << " KB" << std::endl; std::cout << "当前进程工作集大小(Working Set):" << pmc.WorkingSetSize / 1024 << " KB" << std::endl; std::cout << "当前进程分页池使用量:" << pmc.PagePoolUsage / 1024 << " KB" << std::endl; } else { std::cerr << "调用GetProcessMemoryInfo失败,错误码:" << GetLastError() << std::endl; return 1; } return 0; }
与HeapWalk/HeapSize的对比
HeapWalk需要遍历进程所有堆,再逐个枚举堆内存块并累加大小,代码繁琐且存在额外性能开销;GetProcessMemoryInfo由系统直接返回汇总后的内存统计数据,速度更快,代码实现量极小,是当前场景的最优选择。
备选轻量方案:GetProcessWorkingSetSize
如果仅需获取工作集的大小范围,可使用这个更轻量的API,但它只能返回工作集的最小/最大值,无法提供私有字节等详细内存数据:
#include <windows.h> #include <iostream> int main() { SIZE_T minSize, maxSize; if (GetProcessWorkingSetSize(GetCurrentProcess(), &minSize, &maxSize)) { std::cout << "工作集最小大小:" << minSize / 1024 << " KB" << std::endl; std::cout << "工作集最大大小:" << maxSize / 1024 << " KB" << std::endl; } else { std::cerr << "调用GetProcessWorkingSetSize失败,错误码:" << GetLastError() << std::endl; return 1; } return 0; }
内容的提问来源于stack exchange,提问作者Sergey Vlasov
相关产品推荐
相关产品推荐

