sig*_*igy 2 c++ python memory-leaks cpython python-c-api
以下程序,当链接到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;
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,似乎并非每次迭代都会泄漏内存.但我所看到的是,无论泄漏如何,python打印缓慢的引用计数增加了每次迭代大约90次的(非常量)计数.使用Visual Studio诊断工具我发现泄漏来自于PyImport_ImportModule()从磁盘读取已编译模块时的调用(实际调用堆栈深度为几级).
是否还需要我不知道的额外清理步骤?或者有什么关于Python垃圾收集器可能导致这一点,它不是一个"真正的"内存泄漏?
Py_Finalize- Python/C API参考手册(强调我的):
<...>
错误和警告:模块中模块和对象的破坏是按随机顺序完成的; 这可能导致析构函数(__del __()方法)在依赖于其他对象(甚至函数)或模块时失败. 不加载由Python加载的动态加载的扩展模块.Python解释器分配的少量内存可能无法释放(如果发现泄漏,请报告).不释放在对象之间的循环引用中绑定的内存.扩展模块分配的某些内存可能无法释放.如果多次调用初始化例程,某些扩展可能无法正常工作; 如果应用程序多次调用Py_Initialize()和Py_Finalize(),就会发生这种情况.
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |