더북(TheBook)

예제의 동작은 복잡하지 않다. 용량이 증가할 때까지 벡터 컨테이너에 원소들을 추가하고, 용량이 증가하면 해당 시점의 sizecapacitysizes, capacities 컨테이너에 기록한다. 이 과정을 다양한 초기 원소 크기를 갖는 컨테이너에 반복해서 수행한다. 내가 사용하는 컴파일러의 실행 결과는 다음과 같다.*

Appending to a vector with 0 initial elements:

Size/Capacity: 0/0 1/1 2/2 3/3 4/4 5/6 7/9 10/13 14/19 20/28 29/42

 

Appending to a vector with 10 initial elements:

Size/Capacity: 10/10 11/15 16/22 23/33 34/49 50/73 74/109 110/163 164/244 245/366 367/549

 

Appending to a vector with 20 initial elements:

Size/Capacity: 20/20 21/30 31/45 46/67 68/100 101/150 151/225 226/337 338/505 506/757 758/1135

 

Appending to a vector with 30 initial elements:

Size/Capacity: 30/30 31/45 46/67 68/100 101/150 151/225 226/337 338/505 506/757 758/1135 1136/1702

사용하는 컴파일러에 따라 출력 결과는 다를 수 있다. 이는 벡터 용량을 증가하는 데 쓰이는 알고리즘에 따라 다르기 때문이다. 첫 번째 출력을 보면 빈 벡터로 시작해서 원소 하나로도 메모리가 필요하고, 용량이 증가하는 폭도 작아서 메모리 할당이 매우 빈번하게 발생한 것을 볼 수 있다. 나머지 출력 그룹을 보면 용량 증가는 컨테이너의 크기와 관련이 있는 것을 알 수 있다. 각 할당은 원소들의 현재 개수에서 50%씩 늘어난다. 이는 컨테이너의 초기 크기를 결정할 때 할 수 있다면 초기 크기를 주의해서 정해야 한다는 뜻이다.

* 역주

컴파일러에 따라 실행 결과는 달라질 수 있다. 이는 STL 구현체에 따라 다르기 때문이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.