有没有一种方法可以测量 C++ 程序的运行时内存使用情况?

3

基本上我在做一些竞技编程,我想要检查(本地)程序在运行时使用了多少内存。我想用另一个程序来测量这个。有没有办法可以做到这一点?如果可以的话,能否提供代码?我感到相当困惑。

如果有平台无关的方法会更好。


如果没有平台无关的方法,你有考虑过哪个平台吗? - Bill Lynch
1
肯定没有平台无关的方法。 - john
1
Heaptrack是一种方法(适用于Linux)。另一个hacky的方法是重载newdelete运算符并计算您的分配数量。 - Waqar
2
@Waqar 别忘了 mallocfree。我曾经在一个项目中工作过,他们重载了所有相关的 newdelete 操作符,并为 mallocfree 定义了宏。这基本上是有效的,但由于内存碎片化而导致的内存问题除外。 - Michael Veksler
1个回答

2
很遗憾,没有平台无关的方法。如果你想在不改变程序代码的情况下测量内存使用情况,则需要使用特定于操作系统的工具。
在Linux上:如何查看Linux中进程使用的内存?。它基本上告诉你要解析/proc/{正在运行的程序的进程ID}/smaps。这个变体可能适用于其他拥有/proc/文件系统的系统。
在Windows上:如何在C++中使用GetProcessMemoryInfo?。它需要进程的HANDLE,可以使用以下方式获得。
handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 
                     FALSE, process_id);
PROCESS_MEMORY_COUNTERS couters;
GetProcessMemoryInfo( handle, &counters, sizeof(counters));
CloseHandle(handle);

now do something with counters ....
               

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接