개발/Rust

[Rust] Box와 Rc의 차이점

njsung 2023. 3. 31. 13:27
반응형

Box

  • heap에 할당된 값에 대한 소유권을 가진다는 뜻
  • 일반적으로 heap 메모리에서 할당된 데이터를 관리하기 위해 사용됨
  • C++의 'unique_ptr'와 유사하며, 스택에 할당되는 대신 heap 메모리에 할당됨

Rc

  • reference counting을 의미하며, 여러 개의 소유권이 필요한 경우 사용됨
  • 여러 개의 소유권을 가질 수 있으며, 이를 통해 동일한 데이터에 대한 여러 개의 참조를 추적할 수 있음
  • C++의 'shared_ptr'와 유사하며, 여러 개의 소유권을 추적하여 해당 데이터가 더 이상 필요하지 않을 때 자동으로 제거됨

공통점

  • 메모리 관리에 큰 도움을 줄 뿐만 아니라 코드의 안전성을 높이는 데 도움이 됨

예제 코드

use std::rc::Rc;

fn box_value() {
    // Box로 heap에 할당된 값 생성
    let boxed_value = Box::new(10);

    // Rc로 boxed_value를 참조하는 shared reference 생성
    let mut shared_reference = Rc::new(boxed_value);

    // shared_reference를 클론하여 새로운 shared reference를 생성
    let shared_reference_clone = shared_reference.clone();

    // boxed_value 값을 20으로 바꿈
    let mut mutable_reference = Rc::make_mut(&mut shared_reference);
    *mutable_reference = Box::new(20);

    // 모든 reference가 변경된 값을 공유
    println!("Value: {}", *shared_reference_clone);
    println!("Value: {}", *shared_reference);
}
728x90

 

반응형