c++ - 在 Qt 中获取 "Physical Memory currently used by current process"错误

标签 c++ qt memory

我尝试在 Qt 5.5 中通过本教程获取“当前进程当前使用的物理内存”:How to get system cpu/ram usage in c++ on Windows 当我尝试将此功能添加到我的应用程序时,出现错误...

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); // error C2664
SIZE_T physMemUsedByMe = pmc.WorkingSetSize;

错误:

C2664: 'BOOL K32GetProcessMemoryInfo(HANDLE,PPROCESS_MEMORY_COUNTERS,DWORD)' : cannot convert argument 2 from 'PROCESS_MEMORY_COUNTERS_EX *' to 'PPROCESS_MEMORY_COUNTERS'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

感谢您的帮助。

最佳答案

根据文档GetProcessMemoryInfo可以接受指向 PROCESS_MEMORY_COUNTERSPROCESS_MEMORY_COUNTERS_EX 的指针。最新类型包含一个附加字段。

它可能取决于 SDK 版本,但在我的头文件 psapi.h 中,此函数仅使用指向 PROCESS_MEMORY_COUNTERS 的指针声明。因此,扩展结构版本编译失败。

两种解决方案都有效:

// use only PROCESS_MEMORY_COUNTERS structure
PROCESS_MEMORY_COUNTERS pmc;

// or cast structure type
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(),
    reinterpret_cast<PPROCESS_MEMORY_COUNTERS>(&pmc), sizeof(pmc));

Sinse GetProcessMemoryInfo 也有结构大小作为参数,扩展结构 PROCESS_MEMORY_COUNTERS_EX 也被填充。

关于c++ - 在 Qt 中获取 "Physical Memory currently used by current process"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787912/

相关文章:

android - 在linux或android中获取文件/照片的物理内存地址

c++ - 我可以在任何函数中访问在 main 中声明的变量吗?

c++ - 如何在 C++ 中获取 put() 流指针的值

c++ - DirectX:无法平移矩形

c++ - STL 容器的右值引用限定符

qt - 将数据处理与 GUI 分开

c++ - 如何检测全局拖动事件?

android - SQLite 数据库或 XML string[] 哪个内存效率更高?

c++ - Qt 中的第一个控制台应用程序

c - OpenCV 泄漏内存(cvResize、cvCreateImage)