はい、私はコンピュータシステムコースを受講しています。 mallocを実装するためのさまざまな割り当て方式についていくつか質問がありました。 明示的なリストの場合、LIFOのようなスタックを使用してmallocを実装すると、以前に解放されたメモリへのポインタを持つ目的は何ですか?なぜ二重連結リストが必要なのか?単独でリンクされたリストも同様に機能しませんか?Malloc割り当てスキーム
Malloc lecture. 私はこのリンクをオンラインで見つけました。スライド7を見て、私が何を話しているのか見ることができます。
分離リスト割り当て方式を見ているとき、これらのリストは一方向の権利ですか?また、合体メカニズムは正確に何ですか?たとえば、4つの単語が解放されている場合は、周りの空き領域が分離されたリンクリストに挿入される前に、まずそれを結合してみましょうか?または、それぞれの分離リンクリストの '4ワード'セクションに4ワードブロックを挿入するだけですか?
ありがとうございます。
私はあなたが何を言っているかを見ていると思いますが、末尾のポインタを維持する必要がないことについてもっと詳しく説明できますか?また、私が空きブロックを呼び出した場合、B.私たちはB-> next-> prev = Bと仮定していますか?これが当てはまらない場合、リンクされたリストがどのように役立つかはわかりません。また、分離リストアロケータでヒープを初期化する最も良い方法は何でしょうか?あなたはいくつかのパターンでページを分割しますか?あなたが指定された無限大カテゴリを打つまで、2ワードの64フリーブロック、4ワードの64フリーブロック、64ワードのフリーブロックを与えますか?あるいは、より良い初期化方法がありますか? – de1337ed
@ de1337ed:どのノードリスト処理コードも書かれていないのですか?それを渦巻きにしてください:ノードをリンクリストに挿入する関数を書いてください。リストをアドレス=ソート順に保つ。単独でリンクしてみてください。そしてそれを二重リンクのために修正してください。 (あなたの質問に答えるために 'B-> next-> prev'は*常に* Bです。そうでなければ、バグがあります。)ヒープを初期化することは、実装者の政策決定の対象となります。 512バイトのブロックはすぐに使用できますか?システムによって異なります。 – wallyk