我正在 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)
,内存使用量不会随着时间的推移而增长。
关于外部元组窃取对内部元组的引用,我错了吗?是否有其他原因无法回收内存?