-3

仕組みを理解したいfree()。以下の例でfree()は、解放する必要があるブロック内のバイト数をどのように知るのでしょうか?

#include <stdlib.h>

int main()
{     
    char *p= NULL;
    int size = 25;
    p = (char *)malloc(size);

    /* some operation on p */

    free(p);
}
4

1 に答える 1

2

それは実装固有です。定義されているのは、アプリケーションに対してどのように機能するかだけです。実装は、優れたパフォーマンス/低メモリ使用/...を提供するために必要な構造を自由に使用できます。

例として、ブロックが返される前に数バイトを予約し、そこにサイズを格納する方法があります。たとえば、malloc()25 バイトの場合、実際には 29 バイトが予約され、最初の 4 バイトにサイズが格納され、最後の 25 バイトへのポインターが返されます。free()次に、ポインタを取り、4 を引いてサイズを読み取ることができます。

別の方法は、アドレス/サイズをハッシュ テーブルに保存することです。これにより、誰かが を呼び出したときに、free()ハッシュ テーブルでサイズを調べることができます。

于 2013-06-12T04:51:00.477 に答える