gpt4 book ai didi

c++ - 需要使用c++获取进程内存

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:25 26 4
gpt4 key购买 nike

我想在我的应用程序 (c++/unix/multithreaded) 的运行时计算我的进程内存 (rss)。我们是否有任何 API 可用于此。请注意,我知道阅读/proc/stat 和getrusage() ,但不想从应用程序读取/解析系统文件,并且 getrusage() 在我的 linux 发行版中不起作用。

整个目的是检查由我的应用程序引起的内存泄漏。我什至尝试通过重载 new/malloc/calloc/realloc 来跟踪内存并跟踪内存分配,但即使使用这些我也无法跟踪进程分配的整个内存。如果您可以建议我应该在除上述 API 之外的其他可能区域寻找内存分配/内存泄漏,那也会很有帮助。我知道 Valgrind/mpatrol 类型的内存监控工具..但不幸的是它不适用于我的应用程序..提前致谢

最佳答案

首先,此类信息是特定于操作系统的。它必须在 Linux、MacOSX、FreeBSD 上以不同的方式完成...

在 Linux 上,幸运的方法是,正如每个人都告诉您的那样,使用 /proc文件系统,这是所有系统实用程序(例如 topps)检索该信息的方式(可能通过使用 libproc,这只是一个包装读取 /proc/ 文件)。

你能解释一下为什么阅读吗? /proc/self/statm/proc/self/stat/proc/self/status/proc/self/ map 对你来说不可能吗?

请记住,这些 /proc/ 文件是伪文件,读取它们时不涉及对磁盘的实际慢速 I/O 操作。而且您必须按顺序阅读它们,查找(或 stat-ing)它们是行不通的。

我觉得

long process_size_in_pages(void)
{
long s = -1;
FILE *f = fopen("/proc/self/statm", "r");
if (!f) return -1;
// if for any reason the fscanf fails, s is still -1,
// with errno appropriately set.
fscanf(f, "%ld", &s);
fclose (f);
return s;
}

是检索该信息的最快方式。你为什么不能那样做?

关于c++ - 需要使用c++获取进程内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9513633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com