【发布时间】:2017-08-15 18:04:11
【问题描述】:
以下程序在与 python 2.7.13 链接并在 Windows 10 上运行缓慢但稳定地泄漏内存时。
#include <Python.h>
#include <iostream>
int main()
{
std::cout << "Python version: " << PY_VERSION << std::endl;
while (true)
{
Py_Initialize();
//PyGC_Collect();
Py_Finalize();
}
return 0;
}
有趣的事实是,似乎并非每次迭代都会泄漏内存。不过,我看到的是,无论泄漏如何,python 打印的引用计数每次迭代都会缓慢增加大约 90 的(非常量)计数。使用 Visual Studio 诊断工具,我发现泄漏来自对 PyImport_ImportModule() 的调用,当时它从磁盘读取已编译的模块(实际调用堆栈有几级深)。
是否需要我不知道的其他清理步骤?或者 Python 垃圾收集器是否存在可能导致这种情况的问题,并且它不是“真正的”内存泄漏?
【问题讨论】:
-
我认为一般你
initialize一次,finalize一次,所以泄漏是一个常数,这使得它根本不是内存泄漏。
标签: python c++ memory-leaks python-c-api cpython