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
반응형