1

我正在 C++ Python 扩展中构建一组嵌套的元组。但是,我在管理引用计数方面遇到了一些问题。

重新创建此内存泄漏的最少代码:

PyObject *outer = PyTuple_New(outer_size);
for (size_t index = 0; index < outer_size; ++index) {
    PyObject *inner = Py_BuildValue("iiiiiiiiid", ...);
    PyTuple_SetItem(outer, index, inner);
}
Py_CLEAR(outer);
Py_INCREF(Py_None);
return Py_None;

PyTuple_SetItem(outer, index, inner)现在,如果我用 a代替Py_CLEAR(inner),内存使用量不会随着时间的推移而增长。

关于外部元组窃取对内部元组的引用,我错了吗?是否有其他原因无法回收内存?

4

1 回答 1

1

事实证明,我误认为内存使用量增长非常缓慢(出于其他原因)是内存泄漏。如果引用计数失败,它会增长得更快。所以,这是真的。此代码不会泄漏。

于 2012-03-06T00:35:39.713 回答