0

残念ながら、(バイナリ)バディメモリシステムでの最悪の場合の(外部)フラグメンテーションオーバーヘッドの見積もりを含む、自由に利用できるテキストを見つけることができません。M(1 + lg2 m)のようなものだけを見つけましたが、証拠はありません。この式は、サイズMの合計メモリを割り当てることを保証するバディヒープサイズを推定(?)します(mは割り当てられた最長のブロックです)。この推定は、少なくともm=2では粗すぎるようです。また、その証拠は興味深いでしょう。

この件に関する説明やリンクをいただければ幸いです。

4

1 に答える 1

1

これは、Knuth 著 The Art of Computer Programming の Volume 1 のセクション 2.5 の演習 41 でカバーされているようです。Knuth は、サイズが 1、2、.. 2^k のブロックを考慮し、合計ストアが n 個割り当てられている - 引用が続く

このような分割ブロックによって消費されるストレージの合計が kn を決して超えないことは、k に関する帰納法によって証明できます。サイズ 2^(k + 1) のブロックを分割するすべてのリクエストの後、分割された 2^k ブロックでは最大 kn 個の場所を使用し、分割されていないブロックでは最大 n 個の場所を使用しています。

(引用終了)したがって、最大でn(k + 1)ストアを使用することを保証する、最大2 ^(k + 1)のサイズのブロック用のメモリアロケーターがあるかのようにこれを見ることができると思いますn ストアは、サイズ 2^(k+1) のブロックを配信し、より小さなブロックの要求を、最大でも nk ストアを使用してそれらの要求を処理できる誘導的マジック アロケーターに延期します。(k+1)n ブロックのプールから始めた場合、マジック アロケーターは kn 個以上のストアを必要としないため、サイズ 2^(k+1) のブロックのアロケーターは常に、手付かずのフラグメント化されていない少なくとも n 個のストアを持ちます。サイズ 2^(k+1) のリクエストを処理するブロック。

于 2011-06-09T18:54:11.137 に答える