使用 C 扩展 python 时发现内存泄漏

Posted

技术标签:

【中文标题】使用 C 扩展 python 时发现内存泄漏【英文标题】:Find memory leaks when extending python with C 【发布时间】:2015-01-12 16:39:03 【问题描述】:

我写了一些 C 代码来创建一个 python 模块。我自己编写了代码(没有使用 SWIG 等)。如果您有兴趣,C 代码位于this 线程的底部。

问:有什么方法可以(希望很容易)找到我的 C 代码是否存在内存泄漏?有什么方法可以利用 python 的强大功能在其扩展中发现内存泄漏?

【问题讨论】:

如果在 Linux 上 -> valgrind sys.getrefcount(some_object) 有助于快速进行健全性检查(例如,确保您不会意外地意外增加输入对象的引用计数)——但它不能替代像 valgrind 这样的泄漏检测工具。 已回答的类似问题。 ***.com/questions/3982036/… 【参考方案1】:

如果您使用 linux 环境,我们可以使用名为 valgrind 的调试器轻松找到内存泄漏。 要首先获取 valgrind,您必须使用命令从 Internet 安装它

sudo apt-get valgrind

安装完成后,使用此调试器编译您的 c 代码,您可以轻松找到内存泄漏。此调试器显示内存泄漏的原因,并指定发生泄漏的行。

【讨论】:

以上是关于使用 C 扩展 python 时发现内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏与垃圾回收机制

OpenGL VBO 会泄漏内存吗?

内存泄漏和内存溢出的区别

Android开发常见的Activity中内存泄漏及解决办法

键盘扩展内存泄漏?

从C ++运行python脚本时内存泄漏