-1

1)メモリリークツールと呼ばれるものもありますBoehmgcか?そのツールは他のツールと比べてどうですか?

2)、、を使用LeakTracermudflapましValgrindた。しかし、残念ながら、LeakTracerにはメモリホギング(開始時に大量のメモリをプールしてから割り当てる)という欠点があります。そのため、代替手段は何ですか?

4

1 に答える 1

4

Boehm GCは、Javaのガベージコレクションに似たガベージコレクターです。あなたが言及する他のツールは、あなたが是正措置をとることができるように、リークについて警告するように設計されています。ガベージコレクションは、プログラムの実行時に、使用されなくなった割り当てを見つけて回復するように設計されています。例(ウィキペディアのページから):

#include <assert.h>
#include <stdio.h>
#include <gc.h>

int main(void)
{
    int i;

    GC_INIT();
    for (i = 0; i < 10000000; ++i)
    {
        // GC_MALLOC instead of malloc
        int **p = GC_MALLOC(sizeof(int *));
        int *q = GC_MALLOC_ATOMIC(sizeof(int));

        assert(*p == 0);
        // GC_REALLOC instead of realloc
        *p = GC_REALLOC(q, 2 * sizeof(int));
        if (i % 100000 == 0)
            printf("Heap size = %zu\n", GC_get_heap_size());
    }

    // No free()

    return 0;
}

個人的には、CまたはC ++でガベージコレクションを使用することについて、私を非常に不安にさせる何かがあります。C ++の場合、「スマートポインター」は、所有権が不明確なシナリオ(ただし、設計で不明確な理由について知りたい場合があります)や、例外安全性の支援(たとえば、現在非推奨std::auto_ptrになっているもの)で私の意見を述べる方法です。のために設計された)

リークディテクタについては、次のものを追加できます。

Linuxのもののリストに。

関連するメモリチェックツールですが、リークはありません:

于 2011-08-29T10:53:39.540 に答える