2011-01-03 19 views
10

イメージングには、バイトを含むメモリがいくつかあります。[++++++ ----- ++++ - ++ - +++++++++ -------- +++ ++]断片化の計算方法は?

「+」は割り当てられたことを意味し、「 - 」は空きを意味します。

私はという数式を検索して、断片化の割合を計算しています。

背景スタティックメモリを搭載した組み込みデバイス向けに、小さなダイナミックメモリ管理を実装しています。私の目標は、少量のデータを格納するために使用できるものを用意することです。ほとんどの着信パケットは、それぞれ128バイトの無線接続で受信します。

ありがとうございました。

+0

あろう。割り当てブロックの大きさによって異なります。 – Bigbohne

+0

すべてのブロックがほぼ同じサイズで、メモリが静的で、システムが小さすぎてメモリアクセス用のキャッシュを使用できない場合、断片化は重要ではないかもしれません。空きスロットと空きスロットを把握しておく必要があります。アクセスで飛び回っても、それほどコストがかかりません。これは、スキップしたときにヘッドを動かさなければならない電気機械式ディスクドライブ、あるいは遅いDRAMのシステムや、スキップするとキャッシュミスが発生するチャンスとは対照的です。 –

答えて

6

R.が言うように、それはあなたが「断片化の割合」の意味を正確に依存します - しかし、あなたは使用することができます1つの単純な公式は次のようになります、

(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%に近づきます。

+0

私はこれが好きです。評価する必要があります:) – Bigbohne

6

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

現在のレイアウトと同じ割り当てバイト数で、穴がない(つまり、すべての+を左に移動するなど)、メモリレイアウトに収まる128バイトのパケット数を計算します。 は

あなたの「フラグメンテーション率は」あなたの割り当ては、すべてほぼ同じ大きさであれば、単にTOTAL/MAXSIZEMAXSIZEバイトからなるそれぞれにあなたのメモリを分割アルファ= N/N

3

されること数N.とします。その後、断片化は無関係です。

あなたの質問に一般的に答えるために、「断片化」の魔法の数字はありません。断片化されたメモリがどのように反映されているか、さまざまな機能のメリットを評価する必要があります。ここで私はサイズnの関数として、推薦するものです:logは「0無限大」スケールに物事をマップするためにだけ存在することが

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

は注意。実際にはそれを実際に評価すべきではありません。代わりに、単純に評価することがあります1.0

freespace_quality(n) = n * number_of_free_slots_of_size_n/total_bytes_free 

が非常に悪い(いずれかを割り当てることができません)であり、かつ0.0理想的な(サイズnのオブジェクトの最大数を割り当てることができる)という。

0

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

このケースでは、ああ...私は参照 4 /(5 + 2 + 1 + 8)/ 4 = 4

関連する問題