모든 프로그램은 실행하는 동안 메모리를 사용하는 방법을 관리한다. 몇몇 언어는 더이상 사용되지 않는 메모리를 정리하는 GC를 갖고 있거나, 프로그래머가 직접 명시적으로 메모리를 할당하고 해제해야 한다.
러스트는 제 3의 접근법을 이용하는데, 컴파일 타임에 컴파일러가 체크할 규칙들로 구성된 소유권 시스템을 통해 메모리를 관리한다. 소유권 기능의 어떤 것도 런타임 비용은 발생하지 않는다.
즉 실행 시간에 영향을 주지 않는다.
<aside> 💡 Stack & Heap
stack 스택은 값을 받아들인 순서대로 값을 저장하고, 반대 방향으로 값을 지운다.(LIFO) 따라서 새로운 데이터를 넣기 위한 공간 또는 데이터를 가져올 공간을 검색할 필요가 없다. 그 공간은 항상 top으로 설정되어 있기 때문이다. 스택을 빠르게 해주는 또 다른 특성은 스택에 담긴 모든 데이터가 고정된 크기의 동일한 데이터 타입이라는 것이다.
heap 런타임에 타입이 결정되거나 변경되는 데이터는 힙을 사용할 수 있다. 데이터를 힙에 넣을 때는 먼저 저장할 공간이 있는지 확인하고 해당 공간의 포인터를 통해 수행한다. 힙에 저장된 데이터에 접근하는 것은 포인터를 따라가야 하기 때문에 스택보다 느리다.
코드에서 힙의 어떤 데이터를 사용하는지 추적하고, 중복된 데이터 양을 최소화하며, 사용하지 않는 데이터를 제거하는 것 등이 모두 소유권과 관련된 문제이다.
</aside>