GNU/Linux システムで動的メモリ管理が低レベルでどのように機能するか (別名、ptmalloc がどのように機能するか) を理解することを楽しみにしています。
もちろん、私はコードを読みましたが、多くの疑問があります。データ構造はある程度理解していますが、情報漏えいが多発しています。
私の質問は、誰かが実装を詳細に説明しているリソースについて知っているかどうかです。たとえば、「ヒープを分割して理解する」や「Malloc Malleficarum」シリーズおよびポスト シリーズなどの論文を読んだことがあります。彼らは素晴らしい仕事をしていますが、もちろん、多くの実装の詳細を説明するよりも、悪用に重点を置いています。
どのリソースについてもわからない場合は、ここに私の質問をいくつか示します。
アリーナって実際どうなの?heap_info構造体の変数ar_ptrのコードには、「このヒープのアリーナ」というコメントがあるため、アリーナをヒープにすることはできません (どこでも言われているように)。
heap_info構造体に次のポインターがなく、前のポインターがあるのはなぜですか? main_arenaのせいですか?main_arenaとは何ですか?
すべての heap_info構造体は、複数のアリーナ (異なるmalloc_state構造体を指す) を持つことができますか?
ニュース アリーナはいつ作成され、どのコードがそれを処理しますか? データを保存するために要求されたアリーナがロックされたときに新しいアリーナが作成されることを読みました(プロセスまたはプロセススレッドがそれで動作しているため)。また、各プロセススレッドには異なるアリーナがあることも読みました。ここで重要なことは、これらの状況を処理するコードを知っているかどうかです。
また、すべてのメモリ操作が最上位のチャンクまたは最もワイルドなチャンクから生まれたと人々が言うのも理解できません。このコードがどこにあるかわかりますか?
ところで、ミューテックスの詳細については深く掘り下げたくありません。
glibc 2.12.1 での ptmalloc の実装を見直しています。すべての全体的な構造についていくつかの図を作成したいので、これらのことを理解する必要があります!
ありがとうございました。