【发布时间】:2013-07-18 19:59:34
【问题描述】:
我使用的 C 库存在一些内存问题。我发现有时它会过早地减少引用计数,从而导致段错误,并设法通过保留对象列表来增加引用计数来解决这个问题。另一方面,我还确定了引用计数过高的特定情况。有没有办法通过有目的地减少引用计数从 Python 代码中解决这些情况?
我知道这是 hackish,绝不是干净的代码或任何东西,但我必须以某种方式处理有缺陷的 C 库,而且看起来这可能比找出 C 代码中的问题所在更容易(幸运的是它是开源的),修复它,然后在我必须支持的所有平台上重新编译它。
【问题讨论】:
-
您可能想查看
weakref(docs.python.org/2/library/weakref.html) 模块 -
@Brien:嗯...不确定
weakref在这种情况下不会有帮助。 C 代码本身无法执行Py_DECREF- 弱引用只会让我不再增加引用计数。虽然,我想我可以去寻找对我已经拥有的对象的引用并将其变成一个弱引用......嗯...... -
您可以尝试通过 ctypes 使用 Python C API
Py_DecRef。请参阅github.com/matplotlib/matplotlib/commit/… 了解解决 PySide 内存泄漏的示例。 -
@Claudiu 我的错。当我阅读您的问题时,我认为 C 库是一个单独的示例,而您正试图在纯 Python 中实现类似的功能。
-
为什么对这个问题投反对票?
标签: python c reference reference-counting