2012-11-28 3 views
0

Я заметил, что когда я использую неупорядоченный набор unordered_set<int> theSet; для хранения большого количества целых чисел, он не освобождает память даже при вызовах clear() или переосмысливания (0). Даже если я определил множество локально в функции, а функция завершила выполнение, большая часть памяти, зарезервированной набором, по-прежнему сохраняется. Есть идеи?unordered_set C++

Ниже приведен пример кода, когда функция возвращает тестер и мы в основном, память используется тестер не освобождается

Благодарности

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; 
} 
+3

Как вы измеряете потребление памяти? – NPE

+1

Этот вид вопроса должен иметь фрагмент кода, прилагаемый для воспроизведения поведения. – mfontanini

+0

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

ответ

1

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

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

1

Я использую сверху на UNIX

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

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

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

+0

Но как только программа завершается, память сразу же падает! – user1785771

+0

@ user1785771: Да. Когда процесс завершается, все его ресурсы возвращаются. – NPE

 Смежные вопросы

  • Нет связанных вопросов^_^