C and C++

[C++][STL] vector의 메모리(capacity) 완벽하게 제거하기 feat. swap

개발새발 2021. 2. 6. 12:40
반응형

vector를 사용한 뒤 메모리를 해제해주기위해 보통 clear함수를 많이 호출한다. 그러나 clear함수는 vector에 저장된 값들은 제거되지만 vector에 할당 된 메모리는 삭제되지 않는다.

 

아래의 예를 보면 clear 함수 호출 후에도 capacity값이 남아 있음을 볼 수 있다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
 
using namespace std;
 
int main(void) {
    vector<int> vt;
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    
    vt.clear();
 
    cout<< "vector capacity : " << vt.capacity() <<endl;
 
    return 0;
}
cs

실행결과

vector capacity : 8 

(값이 8인 이유는 vector의 메모리 할당 정책 때문)

 

따라서 완벽하게 메모리를 정리해 주기 위해서는 아래의 방법처럼 swap함수를 이용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
using namespace std;
 
int main(void) {
    vector<int> vt;
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    vt.push_back(10);
    
    vt.clear();
    cout<< "vector capacity : " << vt.capacity() <<endl;
    vector<int>().swap(vt);
    cout<< "after swap vector capacity : " << vt.capacity() <<endl;
    return 0;
}
 
cs

실행결과

vector capacity : 8
after swap vector capacity : 0

반응형