память — unordered_set переполнение стека

Я заметил, что когда я использую неупорядоченный набор 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;
}

0

Решение

Вы можете swap с временным набором.

std::unordered_set<MyType> mySet;

// do stuff with mySet

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

Но твое второе утверждение не имеет никакого смысла. Если вы объявили локальный набор для функции, вся память, используемая этим набором, будет освобождена при выходе из функции.

1

Другие решения

Я использую top на unix

Вероятно, происходит то, что память попадает в кучу. Тем не менее, куча не сокращается, и память не освобождается обратно в ОС. таким образом top не показывает никакого снижения потребления памяти.

Если бы вы воссоздали unordered_set после уничтожения первого вы, вероятно, не увидите увеличения потребления памяти, измеряемого top,

Когда процесс завершится, все его ресурсы будут восстановлены.

1

По вопросам рекламы [email protected]