pythonメモリ管理--階層化された割り当て
1539 ワード
1.階層配分
レベル
内容
辞書、元祖、リスト、文字列.....などpythonオブジェクト
階層3
オブジェクト固有のメモリディスペンサ(集約オブジェクトなど)
階層2
pythonオブジェクトディスペンサ
階層1
pythonローレベルメモリディスペンサ
階層0
glibcのmalloc
階層-1
OS仮想メモリマネージャ
レイヤ2
物理メモリ
2.第0層glibc linux OSが提供するglibcというmalloc() が申請したメモリは256 Kバイトより大きく、0階層mallocを忠実に呼び出す.そうでなければ、第1層及び第2層 に転送する.第1層は、256 Kバイト以下の短命オブジェクト を担当する.
3.階層1:python低レベルメモリディスペンサ 3レベルのメモリ構造: arenaサイズは256 K に固定されている poolサイズ固定4 K(オペレーティングシステムの仮想メモリページサイズと一致) unusedarenaobjects単一チェーンテーブル;usable_arenas双方向チェーンテーブル arenaおよびpool の生成および管理
4.レイヤ2:pythonオブジェクトディスペンサ pool内部のblock の管理を担当する blockサイズは8の整数倍で、最小は割り当ての需要を満たして、メモリの位置合わせがあって、例えば14バイトを申請して、あなたに16バイトの をあげます block 3つの状態:割り当て済み、使用済み、未使用 5.第3層:対象固有分配器タプル、リスト、ディクショナリを含む上から下へリソースをくださいPyDictObject(ディクショナリオブジェクト)---> をあげます
レベル
内容
辞書、元祖、リスト、文字列.....などpythonオブジェクト
階層3
オブジェクト固有のメモリディスペンサ(集約オブジェクトなど)
階層2
pythonオブジェクトディスペンサ
階層1
pythonローレベルメモリディスペンサ
階層0
glibcのmalloc
階層-1
OS仮想メモリマネージャ
レイヤ2
物理メモリ
2.第0層glibc
3.階層1:python低レベルメモリディスペンサ
arena > pool > block
4.レイヤ2:pythonオブジェクトディスペンサ
PyDict_new()
---->sizeof(PyDictObject)バイトのblock---->PyObject_GC_New()、PyObject_Malloc()
---->sizeof(PyDictObject)バイトのpool---->usable_arenas-->freepools、 new_arena()
------私はarenaを作りたいのですが、256 Kの直接メモリをください--->malloc()
下から資源malloc()
---->256 Kのメモリを返して、花を持って行きましょう---->usable_arenas-->freepools、 new_arena()
---->arenaを作って、1つのpoolを返して、花を持って行きましょう---->PyObject_GC_New()、PyObject_Malloc()
---->poolの中の1つのblockを返して、花を持って行きましょう---->PyDict_new()
----->辞書の対象