これは、 CPython でオブジェクトにメモリが割り当てられる方法に関するこのコメントから着想を得た投稿です。もともと、これはリストを作成し、リスト内包表記に対してfor ループでリストに追加するというコンテキストにありました。
だからここに私の質問があります:
- CPythonにはいくつの異なるアロケーターがありますか?
- それぞれの機能は何ですか?
malloc
実際に呼び出されるのはいつですか?(このコメントmalloc
で述べられていることに基づいて、リスト内包表記は への呼び出しにならない場合があります- Pythonは起動時にどのくらいのメモリを割り当てますか?
- このメモリで最初に "dib" を取得するデータ構造を管理するルールはありますか?
- オブジェクトが削除されたときにオブジェクトが使用するメモリはどうなりますか (python はメモリを保持して将来別のオブジェクトに割り当てますか、または GC は別のプロセス (Google Chrome など) が使用するためにメモリを解放しますか) ?
- GC はいつトリガーされますか?
list
s は動的配列です。つまり、連続したメモリが必要です。これは、基になる C データ構造配列を拡張できないオブジェクトをリストに追加しようとすると、配列がメモリの別の部分にコピーされ、より大きな連続ブロックが利用可能になることを意味します。リストを初期化すると、この配列にどのくらいのスペースが割り当てられるのでしょうか?- 古いリストと追加されたオブジェクトを保持する新しい配列には、どのくらいの余分なスペースが割り当てられますか?
編集:コメントから、ここにはあまりにも多くの質問があることがわかりました. これらの質問はすべてかなり関連しているため、これを行っただけです。それでも、その場合は、これをいくつかの投稿に分割させていただきます (コメントでお知らせください)。