4

malloc()を使用して、フラグメント化されたヒープにxバイトのメモリを割り当てることを検討してください。ヒープに、xバイトを超えるサイズの連続した複数の場所があると想定します。

次の中から場所を選択するのに最適な(ヒープの浪費を最小限に抑える)ヒューリスティックはどれですか?

  1. xバイトよりも大きい最小の場所を選択します。
  2. xバイトより大きい最大の場所を選択します。

私の直感は、xバイトよりも大きい最小の場所です。どちらが実際に最適かわかりません。

いいえ、これは割り当ての質問ではありません。私はこれを読んでいましたmalloc()とfree()はどのように機能しますか?これは、フォローアップの質問として適しているようです。

4

3 に答える 3

5

異なるサイズの割り当てが混在する一般的なヒープでは、2つのうち、割り当てを収容できる最小のブロックに割り当てを配置します(必要になる前に割り当てることができる最大のブロックのサイズを縮小しないようにするため) 。

ただし、ヒープを実装する方法は他にもありますが、この質問の関連性は低くなります(Doug Leaによる人気のあるdlmallocなど、速度を向上させ、全体的な断片化を減らすために同様のサイズのブロックをプールします)。

どのソリューションが最適かは、常にアプリケーションがメモリ割り当てを実行する方法に依存します。アプリケーションのパターンを事前に知っていれば、サイズと速度の両方で一般的なヒープを打ち負かすことができるはずです。

于 2011-01-03T19:01:27.607 に答える
4

最小の場所を選択することをお勧めします。将来のmallocリクエストについて考えてください。あなたは彼らがどうなるかわからないので、できるだけ多くの要求に応えたいと思っています。したがって、将来、より大きな要求に対応できるように、ニーズにぴったり合う場所を見つけることをお勧めします。つまり、最小の場所を選択すると、断片化が減少します。

于 2011-01-03T18:43:47.280 に答える
3

リストしたヒューリスティックは、それぞれベストフィットアルゴリズムとワーストフィットアルゴリズムで使用されます。十分な大きさの最初のスペースを単純に取得するFirstFitアルゴリズムもあります。これは、ベストフィットとほぼ同じで、はるかに高速です。

于 2011-01-03T18:55:26.377 に答える