더북(TheBook)

원소 1000개를 저장할 수 있는 용량으로 벡터를 생성했는데 실제로는 1001개를 저장했다고 가정해보자. 이렇게 되면 499개를 더 담을 수 있는 초과 용량을 갖게 된다. 원소가 숫자 값인지 공간을 많이 차지하지 않는 객체인지는 중요하지 않다. 객체 하나가 10KB로 크다면 이 프로그램은 사용하지 않는 메모리를 거의 5MB나 할당하게 된다. 따라서 벡터의 초기 크기는 살짝 크게 잡는 게 적게 잡는 것보다 항상 더 낫다.

물론, 추가 메모리 할당을 직접 관리하는 것도 가능하다. sizecapacity를 비교해서 필요할 때 reserve()를 호출해서 필요한 양을 증가시킬 수 있다.

std::vector <size_t> junk {1, 2, 3};
for(size_t i {} ; i<1000 ; ++i)
{
  if(junk.size() == junk.capacity()) // size가 capacity에 도달하면...
    junk.reserve(junk.size()*13/10); // ...capacity를 증가시킨다
  junk.push_back(i);
}

여기서 용량 증가는 기본 50%가 아닌 최대 30%가 된다. 용량 증가를 현재 크기의 퍼센트로 하지 않아도 된다. reserve()junk.capacity()+10을 인수로 지정해서 현재 크기와 관계없이 원소 10개씩만 용량을 증가시켜도 된다. reserve()로 용량을 늘리면 컨테이너의 기존 반복자는 더는 쓸 수 없게 된다는 사실을 잊지 마라.

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