Table of Contents generated with DocToc
- 计算机硬件本身是 unsafe 的,比如操作 IO 访问外设,或者使用汇编指令进行特殊操作(操作 GPU 或者使用 SSE 指令集)。这样的操作,编译器是无法保证内存安全
- 当 Rust 要访问其它语言比如 C/C++ 的库,因为它们并不满足 Rust 的安全性要求,这种跨语言的 FFI(Foreign Function Interface),也是 unsafe 的
- 使用 unsafe Rust 纯粹是为了性能。比如略过边界检查、使用未初始化内存等。这样的 unsafe 我们要尽量不用
距离
- slice::get_unchecked,它不会检查传入索引的有效性,允许违反内存安全的规则。
- mem::transmute将一些数据重新解释为给定的类型,绕过类型安全的规则(详见conversions)。
- 每一个指向一个 Sized 类型的原始指针都有一个offset方法,如果传递的偏移量不在“界内”,则该调用是未定义行为。
- 所有 FFI(外部函数接口 Foreign Function Interface)函数的调用都是unsafe的,因为 Rust 编译器无法检查其他语言的操作。