次のプログラムは、Python 2.7.13にリンクされ、Windows 10でゆっくり実行されますが、着実にメモリをリークします。私のアプリケーションにPythonを埋め込むときのメモリリーク
#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のガベージコレクタについて何かがあり、それは「本当の」メモリリークではありませんか?
私は一般的にあなたが '初期化する'と 'finalize'を1回と思いますので、リークは定数であり、まったくメモリリークではありません。 – leovp