2012-05-11 25 views
1

誰かがヒープの詳細な説明をするリソースを指し示すことができるかどうか疑問に思っていました。実際に利用されているヘッダーとfree()関数が実際にヘッダー情報を削除してメモリーをどのように「割り振り解除」するかについてもっと知りたいと思います。多くのリソースは、汎用を与えるだけです。ヒープヘッダとfree()in C

struct heapHeader 
    { 
     heapHeader* next; 
     heapHeader* previous; 
     unsigned int size; 
    } 

これは決して実際には実装されていないと言います。それで、まとめてみると、ヒープヘッダーが "実践"でどのように実装されているか、free()などの関数が前記ヘッダーとどのようにやり取りされているかについてもっと知りたいと思います。

+3

これは実装固有のものです。 C標準はヒープを実装する方法を正確には伝えていませんが、単にCプログラムのセマンティクスを述べています。これらのセマンティクスに従った実装はすべて有効です。 –

+0

のための['dlmalloc'](http://g.oswego.edu/dl/html/malloc.html)(Doug Lea Malloc)コードを探してください。 1つの非常に深刻な、生産品質の実装。別の実装については、K&R2を見てください。 GNU Cライブラリが 'dlmalloc'を使っているのか、それともそれを使っているのか分かりませんが、それを使っているのであれば、それを見てください。 Perlには独自の 'malloc'が含まれています。あなたはそれを使用するかどうかを選択することができます。それは第4のリソースになります。 –

+0

GNU Cライブラリのmalloc実装は実際にDoug Leaのアロケータに基づいています。しかしもちろん、それはスレッドが競合して別の競技場に行くような独自の髪を成長しています。 – Kaz

答えて

2

C言語標準では、ヒープの詳細は定義されていません。 malloc、calloc、realloc、freeは、実行するタスク、パラメータ、プログラマがその結果をどうすることができるかを指定します。

実装の詳細を尋ねる場合は、後であなたを噛んでしまう可能性のある仮定をすることになります。そうする特別な理由がない限り、内部の仕組みを調べる必要はありません。 mallocとフリーの作業は、次のOSリビジョン、次のコンパイラバージョン、または使用されるコンパイルオプションによって変わるかもしれません。