string이 기본적으로 가지는 정보
- 문자열의 크기 (size)
- 문자를 담아두는 메모리의 용량(capacity)
용량은 실제 문자열의 개수와 다를수 있다.
- 문자열의 값(value)
선택적인 정보
참조 카운팅을 사용하는 string의 추가적인 정보
- 문자열 값에 대한 참조 카운트(reference count)
이런 정보들은 각각의 STL에 따라 여러가지 방법은로 저장, 관리 된다.
예를 들어 string 객체가 위의 정보를 클래스의 인스턴스로 가지고 있는 방법이 있을수도 있고 string 객체는 실제로는 이런 정보를 가지고 있는 객체를 나타내는 포인터일수도 있다.( 이런 경우 string 객체를 생성할때 동적할당이 2번일어 날수 있다.)
또한 어떤 STL의 string 의 경우는 15자 이하는 내부버퍼에 담아두고 그 이상되는 문자열의 경우 동적할당을 하여 값을 저장하며 참조카운터등을 전혀 사용하지 않는다.
정리
- string 문자열의 값은 참조 카운팅이 될 수도, 되지 않을 수도 있습니다. 기본적으로 많은 라이브러리에서 참조 카운팅을 사용하고 있습니다만, 이 기능의 동작을 막는 방법(대개 전처리자 매크로를 통해)도 제공하고 있습니다. 참조 카운팅 기능을 막거나 사용해야 하는 경우에 대해서는 항목 13에서 이야기해 두었습니다. 예를 들어, 동일한 문자열이 아주 자주 복사되고 어떤 애플리케이션 자체에서 문자열 복사를 많이 하지 않을 때에만 참조 카운팅이 효과적입니다.
- string 객체 자체의 크기는 포인터 크기의 한 배에서 일곱 배까지 다양합니다.
- 문자열을 새로 생성할 때 필요한 메모리 할당의 회수는 0번, 1번 또는 2번이 될 수도 있습니다.
- 문자 버퍼를 위해 할당하는 메모리의 최소량에 대한 정책은 구현된 라이브러리마다 천만별 입니다.
|