자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[Rust] 13장 메모리

728x90

✅ 1. 소유권(Ownership)

변수는 어떤 값의 소유자가 되며 소유자는 하나뿐입니다. 소유자가 범위를 벗어나면(scope 종료) 값이 자동으로 메모리에서 해제됩니다.(drop 호출)

{
  let s = String::from("Hello, World"); // s는 "Hello, World"의 소유자
} // 여기서 s가 범위를 벗어나며 메모리 해제

2. 이동(Move)와 복사(Copy)

  • Move: 소유권이 다른 변수로 넘어감 -> 원래 변수는 더 이상 사용 불가
  • Copy: 스택에 저장되는 단순 값(i32, bool 등)은 복사 가능
fn main() {
    let s1 = String::from("Hello"); 
    let s2 = s1; 

// println!("{}", s1); // 🚫 에러: s1은 더 이상 유효하지 X

    let x = 5;
    let y = x; // x의 값이 복사 
    println!("{}", x); // ✅ 에러 X
}

3.대여(Borrowing)와 참조(Refrence)

  • &T: 불변 참조 -> 읽기만 가능, 여러 개 동시에 허용
  • &mut T : 가변 참조 -> 쓰기 가능, 단 한번에 하나만 허용
fn main() {
    let mut s = String::from("Hello");

    let r1 = &s; // 불변 참조
    let r2 = &s; // 또 다른 불변 참조
    println!("r1: {}, r2: {}", r1, r2); // ✅ 에러 X
    // println!("r3: {}", r3); // 🚫 에러: r3는 아직 유효하지 X

    let r3 = &mut s; // 가변 참조 (이 시점부터 불변 참조 X)
    r3.push_str(", World!"); // s를 변경
    println!("r3: {}", r3); // ✅ 에러 X)
}

✅ 4. 수명(Lifetime)

수명은 참조가 유효한 범위를 컴파일 타입에 검사하며 Dangling pointer를 방지합니다.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x 
    } else {
        y
    }

}

✅ 5. RAII (Resource Acquisition Is Initialization)

  • 스코프 종료 시 자동으로 메모리 해제
  • C++의 RAII 개념과 동일
  • drop 함수 자동 호출

 

 

GitHub - Koras02/rust-tutorial: https://thinky.tistory.com/category/Back-End/Rust

https://thinky.tistory.com/category/Back-End/Rust. Contribute to Koras02/rust-tutorial development by creating an account on GitHub.

github.com

 

728x90
LIST