13

たくさんのバイトを含むメモリがあると想像してください。

++++ ++-- ---+ +++-
-++- ++++ ++++ ----
---- ++++ +

+割り当てられた-意味と無料を意味するとしましょう。

断片化の割合を計算する方法のを探しています。

バックグラウンド

静的メモリを備えた組み込みデバイス用の小さな動的メモリ管理を実装しています。私の目標は、少量のデータを保存するために使用できるものを用意することです。ほとんどの場合、ワイヤレス接続を介した着信パケットで、それぞれ約128バイトです。

4

4 に答える 4

8

R.が言うように、それは「断片化のパーセンテージ」が何を意味するかによって正確に異なりますが、使用できる簡単な式は次のとおりです。

(free - freemax)
----------------   x 100%    (or 100% for free=0)
    free

どこ

free     = total number of bytes free
freemax  = size of largest free block

このように、すべてのメモリが1つの大きなブロックにある場合、断片化は0%であり、メモリがすべて数百の小さなブロックに分割されている場合、100%に近くなります。

于 2011-01-03T18:18:53.833 に答える
7

現在のメモリレイアウトに収めることができる128バイトのパケットの数を計算します。その数をnとします。

現在のバイト数と同じバイト数が割り当てられているが、ホールがない(つまり、すべての+を左に移動する)メモリレイアウトに収めることができる128バイトのパケットの数を計算します。その数をNとします。

「フラグメンテーション率」はalpha=n/Nになります

于 2011-01-03T18:09:51.847 に答える
4

割り当てがすべてほぼ同じサイズである場合は、メモリをそれぞれバイトTOTAL/MAXSIZEで構成される断片に分割するだけです。MAXSIZEその場合、断片化は関係ありません。

一般的にあなたの質問に答えるために、「断片化」のためのマジックナンバーはありません。断片化されたメモリがどの程度であるかを反映するために、さまざまな機能のメリットを評価する必要があります。サイズの関数として、これが私がお勧めするものですn

fragmentation(n) = -log(n * number_of_free_slots_of_size_n / total_bytes_free)

log物事を「0から無限大」のスケールにマッピングするためだけにあることに注意してください。実際にそれを評価するべきではありません。代わりに、次のことを簡単に評価できます。

freespace_quality(n) = n * number_of_free_slots_of_size_n / total_bytes_free

理想的1.0(サイズのオブジェクトの可能な最大数を割り当てることができるn)であり0.0、非常に悪い(どれも割り当てることができない)。

于 2011-01-03T18:16:46.613 に答える
0

[++++++ -----++++-++-++++++++-------- +++++]があり、空き領域の断片化(またはその他の割り当て)を測定する連続ブロックの平均サイズ合計ブロック/連続ブロックの数を測定できます。

この場合、4 /(5 + 2 + 1 + 8)/ 4=4になります。

于 2016-05-31T13:55:49.923 に答える