g++ 3.2.2에서 실험결과
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<string> s;
cout << "1 - s.capacity() : " << s.capacity() << endl;
s.reserve(10);
cout << "2 - s.capacity() : " << s.capacity() << endl;
s.reserve(100);
cout << "3 - s.capacity() : " << s.capacity() << endl;
s.reserve(1000);
cout << "4 - s.capacity() : " << s.capacity() << endl;
s.reserve(100);
cout << "5 - s.capacity() : " << s.capacity() << endl;
s.reserve(10);
cout << "6 - s.capacity() : " << s.capacity() << endl;
s.reserve(1);
cout << "7 - s.capacity() : " << s.capacity() << endl;
s.reserve(0);
cout << "8 - s.capacity() : " << s.capacity() << endl;
s.clear();
cout << "9 - s.capacity() : " << s.capacity() << endl;
return 0;
}
1 - s.capacity() : 0
2 - s.capacity() : 10
3 - s.capacity() : 100
4 - s.capacity() : 1000
5 - s.capacity() : 1000
6 - s.capacity() : 1000
7 - s.capacity() : 1000
8 - s.capacity() : 1000
9 - s.capacity() : 1000
vecter, string 모두 clear() 함수를 호출해도 capacity가 변하지 않는 것을 알 수 있다.
Visual C++ 6.0도 clear()를 호출해도 capacity가 변하지 않지만
Visual C++ 7.1은 clear()를 호출하면 capacity가 0이 된다고 한다.
capacity가 0이 되어 얻는 장점은 memory 낭비를 막을 수 있다는 점이고
단점은 성능이 나빠진다는 것이다.
capacity를 그대로 유지하는 것의 장점은memory allocation횟수를 줄여 성능상의 이득이 있다는 것이고
단점은 memory가 낭비될 수 있다는 것이다.(memory 부족 유발가능성)
댓글 없음:
댓글 쓰기