You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下C++ WinAPI获取当前进程内存占用的最简方法咨询

Windows 10下C++获取当前进程内存占用的最简WinAPI方案

最简便的方案:使用GetProcessMemoryInfo

这是WinAPI中直接高效的原生方法,无需遍历堆结构,一次调用就能获取当前进程的核心内存指标,完美避开WMI或外部进程的低效问题,比你提到的HeapWalk/HeapSize简便得多。

实现步骤:

  1. 通过GetCurrentProcess()获取当前进程句柄(无需额外权限);
  2. 调用GetProcessMemoryInfo,传入进程句柄和PROCESS_MEMORY_COUNTERS_EX结构体;
  3. 从结构体中提取所需的内存数据(如私有字节、工作集大小等)。

完整代码示例:

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:20:00