Rust:一个不再有 C/C+的,实现安全实时软件的未来( 二 )

在无法保证内存安全的情况下,未定义行为极有可能发生。漏洞 HeartBleed,一个著名的 SSL 安全漏洞,就是因为缺少内存安全防护;Stagefright,同样出名的安卓漏洞,是因为 C++ 里整数溢出造成的未定义行为。

内存安全不止用来提防漏洞,它对应用程序的正确运行和可靠性同样至关重要。可靠性的重要性在于它可以保证程序不会突然崩溃。至于准确性,作者有一个曾经在火箭飞行模拟软件公司工作的朋友,他们发现传递相同的初始化数据,但是使用不同的文件名会导致不同的结果,这是因为有些未初始化的内存被读取,因此模拟器就不同文件名的原因而使用了垃圾数值做基础,可以说他们的这个项目毫无用处。

为什么不用 Python 或 Java 这些可以保障内存安全的语言呢?

Python 和 Java 使用自动垃圾回收来避免内存错误,例如:

释放重引用(Use-After-Free):申请已经被释放的内存。

多次释放(double free):对同一片内存区域释放两次,导致未定义行为。

内存泄漏:内存没有被回收,导致系统可用的内存减少。

推荐阅读