我正在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)
替换为Py_CLEAR(inner)
,则内存使用量不会随着时间的推移而增长。
外部元组窃取内部元组的引用我错了吗?是否有其他原因记忆不会被回收?
答案 0 :(得分:1)
事实证明,我错误地将内存使用(由于其他原因)用于内存泄漏非常缓慢增长。如果引用计数失败,它的增长速度会快得多。所以,这是真的。此代码不会泄漏。