477 字
2 分钟
Rust vs C++:内存安全的代价与性能的博弈
内存战争
在系统编程领域,C++ 曾经是唯一的霸主。它给予程序员上帝般的权力:直接操作内存指针。 但权力伴随着责任。 Buffer Overflow(缓冲区溢出)、Use After Free(释放后使用)、Double Free(双重释放)… 这些内存错误是过去 30 年软件漏洞的根源。
Rust 横空出世,带着它的 Borrow Checker (借用检查器)。
所有权 (Ownership) 系统
Rust 的核心在于:同一时间,只有一个变量拥有这段内存的所有权。
fn main() { let s1 = String::from("hello"); let s2 = s1; // 所有权转移 (Move) // println!("{}", s1); // 编译报错!s1 已经失效了。}在 C++ 中,s2 = s1 可能是浅拷贝(导致双重释放),也可能是深拷贝(性能损耗)。
在 Rust 中,这叫 Move。编译器在编译阶段就禁止了悬垂指针的产生。
零成本抽象 (Zero-Cost Abstractions)
很多人担心 Rust 的安全性会牺牲性能。 事实恰恰相反。 Rust 的抽象(如迭代器、闭包)编译后生成的汇编代码,往往比手写的 C 代码还要高效。 因为它给编译器提供了更多的别名分析 (Aliasing Analysis) 信息,让编译器敢于进行激进的优化。
C++ 的反击
C++20 引入了 Concepts,智能指针 (std::unique_ptr, std::shared_ptr) 也越来越普及。
现代 C++ 写好了,安全性也不差。
但问题是:Rust 默认安全,C++ 默认不安全。
在 C++ 中,写出安全代码需要极高的自律和经验;在 Rust 中,写出不安全代码需要显式地写 unsafe {} 块。
结论
如果你是写高频交易引擎 (HFT),C++ 的生态和极致控制力依然是首选。 如果你是写操作系统、浏览器引擎、或者需要长期维护的基础设施,Rust 是未来。 Linux 6.1 内核引入 Rust,就是最好的背书。
Rust vs C++:内存安全的代价与性能的博弈
https://www.oferry.com/posts/a49/