The C++ Standard Libray - A tutorial and reference 의 486을 보면
다음과 같은 설명이 있다.
string::capacity() : reallocation없이 사용할 수 있는 문자수 return
string::reserve(n) : reallocation을 피하기 위해 n만큼 메모리 확보
string::reserve() : argument를 주지 않으면 현재 저장된 character size로 shrink
그래서 RedHat Linux 8, 9 (g++ 2.9.6과 g++ 3.2.2에서 실험했다.)
$ cat a.cpp
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
std::string s;
s = "hi";
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();
cout << "8 - s.capacity() : " << s.capacity() << endl;
return 0;
}
g++ 2.9.6의 경우
1 - s.capacity() : 16
2 - s.capacity() : 16
3 - s.capacity() : 16
4 - s.capacity() : 16
5 - s.capacity() : 16
6 - s.capacity() : 16
7 - s.capacity() : 16
8 - s.capacity() : 16
g++ 3.2.2의 경우
1 - s.capacity() : 2
2 - s.capacity() : 10
3 - s.capacity() : 100
4 - s.capacity() : 1123
5 - s.capacity() : 1123
6 - s.capacity() : 1123
7 - s.capacity() : 1123
8 - s.capacity() : 1123
g++ 2.9.6은 reserve()가 그냥 폼으로 있는 것 같고;;
g++ 3.2.2는 reserve기능은 되나 shrink는 안되는 것 같다.
(사실 shrink안되는 편이 성능에 유용할지도..)
댓글 없음:
댓글 쓰기