9

私はシステムソフトウェア学部の学生です。現在、Windows 用のメモリ マネージャーを開発しています。malloc()これがandの私の簡単な実装ですfree():

HANDLE heap = HeapCreate(0, 0, 0);

void* hmalloc(size_t size)
{
    return HeapAlloc(heap, 0, size);
}

void hfree(void* memory)
{
    HeapFree(heap, 0, memory);
}

int main()
{
    int* ptr1 = (int*)hmalloc(100*sizeof(int));
    int* ptr2 = (int*)hmalloc(100*sizeof(int));
    int* ptr3 = (int*)hmalloc(100*sizeof(int));

    hfree(ptr2);
    hfree(ptr3);
    hfree(ptr1);

    return 0;
}

それは正常に動作します。しかし、複数のヒープを使用する理由があるのか​​ わかりませんか? さて、ヒープにメモリを割り当てて、割り当てられたメモリ チャンクのアドレスを取得できます。しかし、ここでは 1 つのヒープを使用します。複数のヒープを使用する理由はありますか? 多分マルチスレッド/マルチプロセスアプリケーション用ですか? 説明してください。

4

5 に答える 5

0

複数のヒープを使用したのは、複雑なデータ構造を構築するプログラムを作成したときだけでした。データ構造をウォークスルーして個々のノードを解放することでデータ構造を解放するのは簡単なことではありませんでしたが、幸運なことに、プログラムはデータ構造を一時的に (特定の操作を実行している間) 必要としただけだったので、別のヒープを使用しました。不要になったときに、HeapDestroy を 1 回呼び出すだけでデータ構造を解放できるようにしました。

于 2013-11-15T23:14:02.363 に答える