对比C++,Rust在内存安全上做的努力
创作时间:
作者:
@小白创作中心
对比C++,Rust在内存安全上做的努力
引用
CSDN
1.
https://blog.csdn.net/qq_50764711/article/details/143872609
近年来,越来越多的组织建议在系统级开发语言选型时优先考虑Rust而非C/C++。谷歌数据显示,Android的安全漏洞从2019年的223个降低到2022年的85个,这一显著改善主要归功于Rust代码比例的增加。在Android 13中,已有约21%的新原生代码采用Rust开发。微软、AWS和Linux内核也相继引入Rust。那么,作为后来者的Rust是如何在内存安全方面取得如此显著成效的呢?
悬空指针
悬空指针是C/C++中常见的内存安全问题之一。当一个对象被释放后,如果还有指针指向该对象并尝试解引用,就会导致未定义行为。
在C++中,这种情况可能如下所示:
int main()
{
std::string *ptr = nullptr;
{
std::string str;
ptr = &str;
}
printf("%s", ptr->c_str());
return 0;
}
而在Rust中,编译器会通过生命周期检查来避免这类问题:
fn main()
{
let str_ref;
{
let str_obj: String = String::new();
str_ref = &str_obj;
}
println!("{str_ref }");
}
尝试编译上述Rust代码时,编译器会报错,指出str_ref的生命周期超过了str_obj的生命周期:
缓冲区溢出
在C++中,使用原生数组进行索引操作时,如果没有边界检查,很容易导致缓冲区溢出。而在Rust中,即使是切片(对连续数据的引用),也会携带长度信息,从而在运行时检测到缓冲区溢出:
fn main() {
let vec: Vec<i32> = vec![1,2,3];
let vec_ref: &[i32] = &vec[0 ..];
for i in 0 .. 4 {
println!("{}", vec_ref[i]);
}
}
运行上述代码时,Rust会抛出panic,明确指出缓冲区溢出:
thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 3', src/main.rs:7:17
对空指针进行解引用
在C/C++中,对空指针进行解引用会导致程序崩溃。而在Rust中,通过强制要求引用在使用前必须被赋值,以及使用Option类型来处理可能为空的情况,可以有效避免这类问题:
fn main() {
let s: String = String::new();
let s_ref: &String = &s;
}
对于可能为空的场景,Rust推荐使用Option类型:
fn main() {
let mut s_ref_option: Option<&String> = None;
let s: String = String::new();
s_ref_option = Some(&s);
}
非法释放内存
在C/C++中,非法释放内存(如double free)会导致程序崩溃。而在Rust中,通过RAII(资源获取即初始化)机制,开发者几乎不需要手动管理内存:
pub trait Drop {
// Required method
fn drop(&mut self);
}
总结
Rust通过一系列创新机制,在内存安全方面取得了显著成效,得到了越来越多组织的认可。将其纳入技术栈,无疑是一个明智的选择。
热门推荐
持针器打结:从入门到精通,外科手术必备技能详解
从零开始学持针器打结:外科手术必备技能详解
潮州广济桥:千年古桥见证历史,世界最早启闭式桥梁
潮州旅行打卡:韩文公祠&东山湖温泉
认怂了?退赛后:韩棋协宣布改规则补发奖金,卞相壹转而力挺柯洁
清明上河园:汴京繁华尽收眼底
清明上河园:一朝步入画卷,一日梦回千年
深圳地铁颜色大揭秘:每条线路都有其独特寓意!
跟着小纤玩转潮汕:5天4晚吃喝玩乐全攻略!
黄金:危机中的避风港
俄乌冲突升级,黄金能否续写避险神话?
钢铁侠 vs. 美国队长:谁才是复联最强领袖?
超级赛亚人形态大揭秘:谁才是最强?
怎样避免灰指甲并发症
陕西西安历史简介
阿里云牵手央视春晚:AR+AI打造科技文化盛宴
铁水打花,如繁星夜空骤现,璀璨夺目,令人叹为观止。
揭秘莆田鞋:从代工到高仿,如何辨别正品与仿品?
西游记里的菩提祖师竟是须菩提?
揭秘《西游记》最大谜团:菩提祖师的真实身份
菩提祖师vs孙悟空:谁才是《西游记》中的最强者?
揭秘菩提祖师:他到底教了悟空啥绝技?
冬季,气管炎高发,如何应对?
香港六合彩在内地的非法活动:现状、危害与对策
山东人眼中的江西美食:9大疑问,5天思考,终于解开了
藿香正气“液”还是“水”,您能分清楚吗?
化疗患者的防吐食谱大揭秘!
医生推荐:吃这三样东西防吐最有效!
深圳地铁带你玩转网红打卡地!
深圳地铁带你打卡隐藏美景!