0

unordered_set<int> theSet;順序付けられていないセットを使用して多数の整数を保持すると、clear() または rehash(0) を呼び出してもメモリが解放されないことに気付きました。関数でセットをローカルに定義し、関数が実行を終了した場合でも、セットによって予約されているメモリのほとんどはまだ予約されています。何か案は?

以下はサンプルコードです。テスター関数が返されてメインにいるとき、テスターに​​よって使用されたメモリは解放されません

ありがとう

using namespace std;
using std::tr1::unordered_set;

void tester() {
    mySet.rehash(x);
    for (int i = 0; i < 10000000; i++)
        mySet.insert(i);

    mySet.clear();
}

int main() {
    tester();
    return 0;
}
4

2 に答える 2

1

私はunixでトップを使用します

おそらく起こることは、メモリがヒープに解放されることです。ただし、ヒープは縮小されず、メモリは OS に解放されません。したがってtop、メモリ消費量の減少は見られません。

最初の を破棄した後に を再作成した場合unordered_set、 で測定されるメモリ消費量の増加は見られないでしょうtop

プロセスが終了すると、そのすべてのリソースが回収されます。

于 2012-11-28T18:35:22.177 に答える
1

swap一時的なセットでできます。

std::unordered_set<MyType> mySet;

// do stuff with mySet

std::unordered_set<MyType>().swap( mySet );

しかし、あなたの 2 番目の主張は意味がありません。関数に対してローカルなセットを宣言した場合、そのセットによって使用されるすべてのメモリは、関数が終了するときに解放されます。

于 2012-11-28T18:23:21.330 に答える