이미 본 적 있는 Vec<T>
나 String
같은 smart pointer를 생각해 봅시다.
Vec<T>
는 바이트들의 메모리 영역을 소유하는 smart pointer입니다.
Rust 컴파일러는 이 바이트들에 뭐가 존재하는지 모릅니다.
smart pointer는 관리하는 메모리 영역에서 내용물을 꺼내기 위해 자기가 뭘 의미하는지 해석하고,
데이터 구조가 그 바이트들 내 어디에서 시작하고 끝나는지 추적하며,
마지막으로 raw pointer를 데이터 구조로, 또 쓰기 편한 멋지고 깔끔한 인터페이스로 역참조 합니다. (e.g. my_vec[3]
)
유사하게, String
은 바이트들의 메모리 영역을 추적하며, 쓰여지는 내용물이 언제나 유효한 utf-8
이도록 프로그램적으로 제한하며,
그 메모리 영역을 &str
자료형으로 역참조할 수 있도록 도와줍니다.
이 데이터 구조들 둘 다, 자기 할 일을 하기 위해 raw pointer에 대한 unsafe한 역참조를 사용합니다.
메모리 상세: