1

ヒープの詳細な説明を提供するリソースを誰かが教えてくれるかどうか疑問に思いました。実際に使用されているヘッダーと、free()関数がヘッダー情報を削除することによって実際にメモリを「割り当て解除」する方法について詳しく知りたいと思います。多くのリソースはジェネリックを与えるだけです

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

そして、これは実際には決して実装されていないと言い続けます。したがって、要約すると、ヒープヘッダーが「実践」でどのように実装されているか、およびfree()などの関数がこれらのヘッダーとどのように相互作用するかについて詳しく知りたいと思います。

4

2 に答える 2

3

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

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

于 2012-05-11T22:45:57.940 に答える
1

以下は興味深い記事です:ヒープ管理についての包括的で説明的な記事です。

[1] http://www.apriorit.com/our-company/dev-blog/209-linux-memory-management

簡単な実装例:

[2] http://lambda.uta.edu/cse5317/notes/node45.html

お役に立てば幸いです。

于 2012-05-11T22:03:52.707 に答える