PythonのGC
PythonのGC
参照カウント
PyObject
Pythonのメモリアロケータ
mallocなどのアロケーションまでに3層のメモリ構造がある
一番右側は辞書オブジェクトの生成時の代表的な関数のコールグラフ
code:txt
第3層: オブジェクト特有のメモリアロケータ : PyDict_New()
第2層: Pythonのオブジェクトアロケータ : PyObject_GC_New(), PyObject_Malloc()
第1層: Python低レベルメモリアロケータ : new_arena()
第0層: 汎用的な基礎アロケータ(glibcのmallocなど) : malloc()
第0層
mallocのようなアロケータ
Pythonでは、割り当てるメモリのサイズによってアロケーションの方法を変える
256byteより大きければmalloc、小さければ1層、2層の出番になる
マークもするし、スイープもするけどMark & Sweep GCではない(?)
拡張モジュールが動作している為,Pythonはルートセットを完全に取り決める事は決して出来ないからです
オブジェクトはCの関数スタック上にあり,ポータブルにルートを見つける方法はないでしょう
ref
みどく
https://postd.cc/visualizing-garbage-collection-in-ruby-and-python/
参考
Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary
translate/garbage_collection_for_python_jp.html PythonのGCについて
たまたまみつけた関係ないやつ
CPythonのToken
#Python #GC