Skip to content

태그: 메모리-참조

총 5개의 글이 있습니다.
Rc 타입과 Weak 타입
메모리-참조
소유권 규칙에 따라 Rust에서 어떤 값은 여러 소유자를 가질 수 없다. Reference Counted를 의미하는 `Rc`는 힙 메모리에 할당된 타입 `T` 값의 소유권을 공유할 수 있게 해주는 타입이다. 즉, 스마트 포인터 `Rc`를 사용하면 타입 `T`의 값에 대한 여러 개의 소유자를 만들 수 있다. 기본적으로, `Rc` 타입은 Clone Trait을 구현하고 있고 clone을 호출해서 `T` 값에 대한 새로운 포인터를 생성하며, 모든 `Rc` 포인터가 해제되면 메모리에 할당된 `T` 값이 drop되는 구조이다. Rust에서 공유된 참조자는 수정할 수 없는데, Rc 타입 또한 예외가 아니며 일반적인 방법으로는 mutable한 참조를 얻을 수 없다. 만약, mutable 한 참조가 필요하면 `Ce
소유권과 Lifetime
메모리-참조
기본적으로 모든 변수 바인딩은 유효한 “범위(스코프)“를 가지며, 범위 밖에서 변수 사용하면 에러가 발생한다. 스코프가 종료되면 변수는 “삭제(drop)“되었다고 하며 그 변수의 데이터는 메모리에서 해제된다. Rust에서는 스코프가 종료될 때 다른 리소스를 해제하기 위해 소멸자가 호출되도록 하는 것을 변수가 값을 소유한다고 정의한다. 러스트의 각각의 값은 해당값의 오너(owner)라고 불리우는 변수를 갖고 있으며 한번에 딱 하나의 오너만 존재할 수 있다. rust fn main() { let s1: String = String::from("Rust"); let s2: String = s1; } 위 코드는 `"Rust"`라는 String 값에 대한 소유권을 `s1`에서 `
스마트 포인터 활용
메모리-참조
스마트 포인터(Smart Pointer)는 포인터처럼 작동하지만 추가적인 메타데이터와 능력들도 가지고 있는 데이터 구조이다. `String`과 `Vec`는 스마트 포인터이다. 스마트 포인터는 보통 구조체를 이용하여 구현되어 있다. 스마트 포인터가 일반적인 구조체와 구분되는 특성은 스마트 포인터가 `Deref`와 `Drop` 트레잇을 구현한다는 것이다. `Deref` 트레잇은 스마트 포인터 구조체의 인스턴스가 참조자처럼 동작하도록 하여, 참조자나 스마트 포인터 둘 중 하나와 함께 작동하는 코드를 작성하게 해준다. 스마트 포인터가 평범한 참조자처럼 취급될 수 있도록 구현한다. `Deref`를 구현한 구조체에 대해 `*`로 값을 참조하면, `deref` 함수를 호출한 후 `*`를 한번 호출하는 것으로