リンクリスト関数がすべて1つのヘッダーファイルにあるリンクリストモジュールを設計するように言われましたが、メモリ割り当て(malloc)はそれらのモジュールでは発生しません。メモリ割り当ては、メイン関数でのみ発生する必要があります。私はそれを理解することができません。私を助けてください。
3 に答える
0
これはすでに実装されています:<sys/queue.h>
ヘッダーのみのリンク リストを見てください。
于 2012-07-16T06:06:38.790 に答える
0
これを構造体の配列として実行し、配列インデックスでリンクできます。その配列は、main
関数で割り当てることができます。リストは割り当てたエントリの数に制限されるため、リストにあるエントリの数を追跡する必要があることに注意してください。
于 2012-07-16T06:12:33.280 に答える
0
ではmain
、一度に十分な量のメモリ (メモリ プール) を割り当てる必要があります。モジュールでは、このプールからメモリ チャンクを管理 (割り当ておよび解放) する必要がありますmalloc
。
メモリ プールについてわからない場合は、http://en.wikipedia.org/wiki/Memory_poolを参照してください。
ただし、断片化の問題があり、取り組む必要があります。以下の手順では、ビット配列を使用して、空きノードと割り当て済みノードをマークします。
例-
- 50
main
*sizeof(node) を割り当てます (50 はアプリケーションによって異なります) - ここで、割り当てられたプールのポインターを関数に渡します。
- カウンターを保持し、割り当てられたノードの数をカウントし、0 に初期化します
- また、0 に初期化されたサイズ 50 のビット配列を保持します (すべてフリー)。
- 割り当て時に、オーバーフローをチェックし、ビット配列を反復処理して、最初の空きノードを見つけます。j番目のビットが 0 の場合、新しいノードのアドレスを Base + j (*ノードのサイズ) として渡し、カウンターをインクリメントします。j番目のビットを 1 に設定します。
- 割り当てを解除するときは、単にカウンターをデクリメントし、対応するビットを 0 に設定します。
HTH
于 2012-07-16T05:42:08.470 に答える