2004년 6월 14일 월요일

vecter, string clear() 함수 memory 관리

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 부족 유발가능성)

댓글 없음:

댓글 쓰기