1. ホーム
  2. python

[解決済み] Pythonはスタック/ヒープを持ち、メモリはどのように管理されていますか?

2022-09-27 14:52:22

質問

Pythonでは変数やメモリはどのように管理されているのでしょうか?スタックとヒープがあり、メモリを管理するためにどのようなアルゴリズムが使用されていますか?この知識を考えると、大規模な数/データクランシングのためのメモリ管理に関する推奨事項はありますか?

どのように解決するのですか?

<ブロッククオート

Pythonでは変数やメモリはどのように管理されているのでしょうか。

自動的です! いいえ、本当に、あなたはただオブジェクトを作成し、Python仮想マシンは、必要なメモリとそれがメモリレイアウトで配置されなければならない場所を処理します。

<ブロッククオート

スタックとヒープがあるのですか? どのようなアルゴリズムが使われているのでしょうか?

について話しているとき CPython を使用します。 プライベートヒープ を使います。 CPython C API ドキュメントより :

Pythonのメモリ管理は、すべてのPythonオブジェクトとデータ構造を含むプライベートヒープを含みます。 Pythonのオブジェクトとデータ構造が含まれています。このプライベート ヒープの管理は、Pythonのメモリマネージャによって内部的に保証されています。Pythonの Pythonのメモリマネージャは、さまざまなコンポーネントを持ち、共有やデータ構造など、さまざまな動的ストレージ管理の側面を扱います。 Pythonのメモリマネージャは、共有、セグメンテーション、事前割り当て、キャッシュなど、さまざまな動的ストレージ管理の側面を扱うさまざまなコンポーネントを持っています。 プリ・アロケーションやキャッシングなどです。

メモリの再利用は主に 参照カウント . つまり、Python VMはオブジェクトを参照している参照の数を内部ジャーナルとして保持し、オブジェクトを参照している参照が無くなると自動的にガベージコレクションを行います。さらに 循環参照を解除するメカニズム (参照カウントでは処理できない) 循環参照を断ち切るためのメカニズムがあります。 伝統的な GC アルゴリズムの逆をいくらか行く とは逆に、到達可能なすべてのオブジェクトを見つけようとします。

注意 この情報は CPython 特有のものです。他の Python 実装、例えば pypy , iron python , jython などは、その実装の仕様に関して、互いに、またCPythonとは異なるかもしれません。それをよく理解するために Pythonはセマンティクス(言語)と基礎となる実装の間に違いがあることを理解する助けになるかもしれません。

この知識があれば、大きな数/データクランチングのためのメモリ管理に関する推奨事項がありますか?

今、私はこのことについて話すことはできませんが、私は確信しています。 NumPy (数値計算のための最も人気のある Python ライブラリ) には、メモリの消費を優雅に処理するメカニズムがあることを確信しています。

Pythonの内部についてもっと知りたい場合は、以下のリソースを参照してください。