본문 바로가기

알고리즘

[알고리즘] 벡터와 메모리

벡터는 어떻게 배열을 유동적인 크기로 사용할까?

정답은 여유분을 두고 메모리를 할당하고 메모리가 부족하면 증설하기 때문이다.

벡터의 크기는 실제 요소의 개수와 같지 않은데 실제 요소의 개수를 size 여유분을 포함한 용량을 capacity라고 한다.

벡터에 요소를 한개씩 추가하는 것을 반복하면 size는 1씩 오르지만 capacity는 1,2,3,4,6,9,13,19,28,42 약 1.5배씩 오른다.

왜 그렇게 오르냐면 벡터가 용량을 늘릴 때 마다 기존 영역에서 늘리는 것이 아니라 (다른 사용 중 메모리 침범 가능성)

용량을 늘린 만큼 비어있는 메모리를 찾아 그곳에 기존 벡터 내용을 복사하기 때문이다. 

이렇게 용량을 증설할 때마다 데이터를 복사하는 것이 부담스러운 작업일 수 있어 reserve로 미리 용량을 예약할 수 있다.

resize를 이용해 size를 조절하는 것으로도 가능하다. clear을 이용해 벡터 내용을 비울 수 있지만 capacity는 그대로다.