Я заметил, что когда я использую неупорядоченный набор 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;
}
Вы можете swap
с временным набором.
std::unordered_set<MyType> mySet;
// do stuff with mySet
std::unordered_set<MyType>().swap( mySet );
Но твое второе утверждение не имеет никакого смысла. Если вы объявили локальный набор для функции, вся память, используемая этим набором, будет освобождена при выходе из функции.
Я использую top на unix
Вероятно, происходит то, что память попадает в кучу. Тем не менее, куча не сокращается, и память не освобождается обратно в ОС. таким образом top
не показывает никакого снижения потребления памяти.
Если бы вы воссоздали unordered_set
после уничтожения первого вы, вероятно, не увидите увеличения потребления памяти, измеряемого top
,
Когда процесс завершится, все его ресурсы будут восстановлены.