欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Rust 内存安全边界:Unsafe 块与原始指针(Raw Pointer)解引用

发表于:|最后更新:|分类:系统编程|阅读:2367 次

Rust 依靠所有权(Ownership)和生命周期(Lifetime)在编译期彻底根除了悬垂指针和数据竞争。但在实现底层驱动或 FFI 互操作时,必须在明确受限的 unsafe 块 中手动保证原始指针解引用的安全性。

一、原始指针读写与未定义行为(UB)边界

rust
fn main() {
    let mut num: i32 = 42;
    // 安全地创建原始不可变和可变指针
    let r1: *const i32 = &num as *const i32;
    let r2: *mut i32 = &mut num as *mut i32;

    unsafe {
        // 解引用原始指针属于 unsafe 操作
        *r2 += 10;
        println!("Value: {}", *r1); // 52
    }
}