【发布时间】:2021-11-19 11:56:20
【问题描述】:
我在运行 C 程序时遇到大量内存使用情况。它使用的内存比预期的要多。由于大量内存使用,甚至操作系统有时也不得不终止进程(而且我的机器中有 20GB 的 RAM)。我尝试运行 valgrind 以查看是否有一些关于内存使用情况的线索。在 valgrind 输出中,我可以看到一个可能指向问题的警告:
==69541== Warning: set address range perms: large range [0x76eb040, 0x2cb27240) (undefined)
但是,我不知道如何知道这么大范围的内存分配在哪里。
希望这不是一个太笼统的问题。我试图提供解决问题的最少细节,但如果需要,我可以提供更多信息。
【问题讨论】:
-
可能是内存泄漏。你在用malloc吗?还有任何递归函数调用或任何可能非常大的数组吗?
-
是的,这是一个有很多内存分配的大项目。是否有可能检测到与这个大范围相关的
malloc(s)? -
Valgrind memcheck 应该能够检测内存泄漏。您需要确保用于存储指向使用 malloc 创建的对象的指针的任何变量在超出范围或重新分配之前使用 free 释放。
-
感谢您的意见,我会回头看一下代码并尝试找到没有frees的mallocs。但是,有没有办法让 valgrind 或其他一些实用程序将我指向发生这种巨大内存分配的代码行?
-
你需要一个好的静态分析工具。市场上有几种,但它们通常需要购买。 en.m.wikipedia.org/wiki/List_of_tools_for_static_code_analysis