3

Python 用の C 拡張モジュールがあります。

モジュールが初期化されると、C コードでのみ使用するメモリの一部を malloc() します。

モジュールが解放されたら、このメモリを解放したいと思います。

Python 3 には、まさに私が欲しいものである PyModuleDef 構造体に m_free メンバーがあります。問題は、Python 2 で同等の機能が見つからないことです。

Python 2 で malloc されたメモリを解放するにはどうすればよいですか?

4

1 に答える 1

1

直接同等のものはないと思います。そのため、m_free が 3.0 で導入されました。詳細については、以下を参照pep 3121してください。

現在、拡張モジュールは通常 1 回初期化され、その後永久に「有効」になります。唯一の例外は、 Py_Finalize() が呼び出されたときです: その後、初期化ルーチンが 2 度目に呼び出されます。これは、リソース管理の観点からは好ましくありません。初期化が呼び出されるたびにメモリやその他のリソースが割り当てられる可能性がありますが、それらを再利用する方法はありません。その結果、現在のところ、Python が割り当てたすべてのリソースを完全に解放する方法はありません。

于 2013-12-23T11:37:55.533 に答える