MST

星途 面试题库

面试题:Rust中unsafe代码块的常见用途有哪些

请列举至少三种Rust中unsafe代码块的常见用途,并简要说明每种用途的场景。
32.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  • 访问和修改原始指针
    • 场景:当需要直接操作内存地址,例如与C语言库进行交互,C语言库可能会返回原始指针,Rust中使用unsafe块来安全地处理这些指针。如在FFI(Foreign Function Interface)场景下,调用C函数获取一个指向数据的指针,在Rust中需要在unsafe块内对其解引用和操作。
  • 调用不安全的函数和方法
    • 场景:有些Rust函数由于自身实现可能会违反Rust的内存安全规则,被标记为unsafe。比如std::ptr::read函数,用于从给定的内存地址读取数据,调用这类函数需要在unsafe块中,因为它绕过了Rust的借用检查机制,若使用不当会导致未定义行为。常用于底层内存操作库的实现。
  • 访问和修改可变静态变量
    • 场景:静态变量在整个程序生命周期内存在,可变静态变量可以被多个线程同时访问和修改,这容易引发数据竞争。在unsafe块中访问和修改可变静态变量,程序员需要自行保证线程安全。例如在实现单例模式且该单例需要可变状态时,可能会用到在unsafe块内访问和修改可变静态变量。