포인터

Box

러스트에서 힙 메모리를 할당하는 가장 간단한 방법

Box<T>는 단순히 T타입값을 힙에 할당하고 그 포인터를 자체적으로 보관

메모리의 관점에서는 타입 시스템으로 사용에 제약을 둔 포인터

따로 해제할 필요없이 데이터가 더이상 사용되지않는 시점에 해제되도록 컴파일 타임에 컴파일러가 보장

Rc

레퍼런스 카운터 포인터

여러 변수가 동일한 값을 참조할 수 있게 함

레퍼런스 카운트가 0이 되면 소멸

여러 참조가 공유하므로 기본적으로 불변데이터만 참조

RefCell

불변으로 정의된 타입에 내부 가변성을 주는 특별한 타입

러스트는 다중읽기-단일쓰기 규칙을 컴파일타임에 보장 

RefCell은 이러한 규칙을 런타임에 체크함으로서 성능과 유연성을 트레이드오프

Arc

여러 스레드에서 레퍼런스 카운터를 바꿀 수 있는 Atomic Rc

Rc는 스레드가 안전하지 않으므로 스레드간에 공유되는 값에 사용

Weak

레퍼런스카운터는 순환참조가 생겨 메모리 누수 발생 가능

순환 참조는 런타임에 일어나는 일이므로 컴파일러의 감지 불가

이러한 누수를 방지하기위해 순환참조가 필요한 곳에 소유권이 없는 관찰자 포인터인 Weak 포인터를 사용

Weak는 데이터를 소유하지는 않고 데이터가 살아있는지만 확인하고 싶을 때 쓰는 포인터

Weak가 참조하고 있어도 원본 소멸 가능

그래서 Weak는 데이터가 살아있는지 먼저 확인한 후 접근하는 방식으로 구현됨