2012-11-28 5 views
0

정렬되지 않은 집합 unordered_set<int> theSet;을 사용하여 많은 수의 정수를 저장할 때 clear() 또는 rehash (0) 호출을 사용해도 메모리가 해제되지 않습니다. 함수에서 집합을 로컬로 정의하고 함수가 예외를 완료하더라도 집합에 의해 예약 된 대부분의 메모리는 여전히 예약되어 있습니다. 어떤 아이디어? 다음은 unordered_set C++

는 테스터 함수가 반환 우리는 메인에있을 때, 테스터에 의해 사용되는 메모리 이

감사

임시 세트 할 수 있습니다 swap
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을 사용합니다. – user1785771

답변

1

를 해제되지 않습니다, 샘플 코드입니다.

std::unordered_set<MyType> mySet; 

// do stuff with mySet 

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

두 번째 주장은 타당하지 않습니다. 함수에 로컬 집합을 선언했다면 해당 집합에서 사용하는 모든 메모리는 함수가 종료 될 때 해제됩니다.

1

나는

유닉스

에 무엇 아마 발생하면 메모리가 힙에 출시 얻을 않는다는 것입니다 정상을 사용합니다. 그러나 힙이 축소되지 않고 메모리가 OS로 다시 릴리스되지 않습니다. 따라서 top은 메모리 소비를 줄이지 않습니다.

unordered_set을 처음 만든 후 다시 작성하면 top으로 측정 한 메모리 소비가 증가하지 않을 것입니다.

프로세스가 종료되면 모든 리소스가 회수됩니다.

+0

하지만 프로그램이 종료되면 메모리가 즉시 삭제됩니다! – user1785771

+0

@ user1785771 : 예. 프로세스가 종료되면 모든 리소스가 회수됩니다. – NPE