개발/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
반응형