Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

크기 조정(Resizing)

Vec이 “확장 가능한” 타입이라고 말씀드렸는데, 실제로 어떻게 늘어나는 것일까요? 만약 최대 용량(Capacity)에 도달한 Vec에 요소를 추가로 넣으려 하면 어떻게 될까요?

let mut numbers = Vec::with_capacity(3);
numbers.push(1);
numbers.push(2);
numbers.push(3); // 용량이 꽉 찼습니다!
numbers.push(4); // 이때 무슨 일이 일어날까요?

이런 경우 Vec은 **자체적으로 크기를 조정(Resizing)**합니다. 더 구체적으로는 메모리 할당자(Allocator)에게 더 큰 새로운 힙 메모리 공간을 요청한 뒤, 기존 요소들을 새 공간으로 모두 복사하고, 이전에 사용하던 메모리는 해제합니다. 이 과정을 **재할당(Reallocation)**이라고 부릅니다.

이 작업은 새로운 메모리 할당과 데이터 복사를 동반하므로, 요소가 많을수록 비용이 꽤 발생할 수 있습니다.

Vec::with_capacity

만약 벡터에 담을 요소의 대략적인 개수를 미리 알고 있다면, Vec::with_capacity 메서드를 사용하는 것이 좋습니다. 처음부터 충분한 메모리를 미리 확보해 두면, 벡터가 커질 때 발생하는 불필요한 재할당을 피할 수 있습니다.

다만, 너무 많은 공간을 미리 잡아두면 메모리가 낭비될 수 있으니 상황에 맞춰 적절히 선택하는 것이 중요합니다.

Exercise

The exercise for this section is located in 06_ticket_management/03_resizing