2011-08-04 19 views
1

リソースを管理する必要があります。基本的に、スイッチ内のレイヤ2接続を識別する固有の番号です。このような接続が16kになる可能性があるため、ユーザーが接続を設定するたびに、一意のインデックスを割り当てる必要があります。同様に、ユーザーが接続を削除したい場合、リソース(番号)は解放されなければならず、他の接続を構成(および識別)するために利用可能でなければなりません。リソースの割り当て/割り当て解除

:今のところ、私は、各ビットがリソースを表す2048バイトのunsigned char型配列を使用してい16K番号を監視するように設定されるビット/解除

を維持するために、unsigned char型の配列に基づいて、ビットマップを使用してい

unsigned char bitmap_array[2048]; 

静的な割り当てのような巨大なチャンクは含まれていませんが、同じことをするより良い方法はありますか?

+1

何か理由はありますか?メモリが非常に限られているプラ​​ットフォームを使用していますか?静的な2kはそれほど悪くないとは思わない – amit

+0

接続に関する他の情報を保存していますか?なぜポインタの代わりに数字を使うことにしたのですか? – perreal

答えて

0

これは埋め込まれていますか? 2kはデスクトップ標準ではあまりメモリではありません。あなたはいつもハッシュテーブルを使うことができますが、あなたは今得ているパフォーマンスを得ることはできません。気分が良くなったらブロックを動的に割り当てることもできます。

私のCは少し文字化けかもしれませんが、私が覚えていれば、それは次のようになります。

unsigned char *ptr = (unsigned char *) malloc(2048 * sizeof (unsigned char)); 
//insert null pointer check here 

ちょうどあなたが完了したら...静の真剣

、2Kをfreeを呼び出すことを忘れないでくださいおそらく割り当ては良いです。

+0

あなたのお返事ありがとうございます:) –

1

別の方法では、[ハッシュ/ツリー]を使用することができます。このサイズは動的に選択されます。このリソースが割り当てられている場合に限り、すべての要素がセットに含まれます。

これらの問題の解決策は次のとおりです。
1.これは遅くなります。
2.要素の数が多い場合、静的配列より多くのメモリが必要になります。

(2k)、私は静的ビットマップ配列に固執します。

1つの以上の可能性:同じトリック仮想メモリを使用して

(pages)を使用しています。
あなたの '配列'をN個に分割し、N個の余分なテーブルを作成します。
テーブル内のすべての要素は、それが関連する配列の一部にマップされます。
今、リソースkを割り当てるとき、kが入っている配列の部分を割り当てなければなりません。そして、他のすべての値を0に設定する必要があります。

それでもチャンクは遅くなり、すべてのエントリが割り当てられると余分なN * 4バイトが必要になります。

データが2kよりはるかに大きい場合にのみ、このソリューションを使用します。

詳細情報:http://tldp.org/LDP/tlk/mm/memory.html

関連する問題