Rust内存管理

总体导向图

在这里插入图片描述

C++以T*为分界,左物右指。T是类型名,x是变量名
把握一个关键:

  • 指针类型定义时候,Rust 存在&,C++存在*,定义类型名x本质就是一个指针类型,因此mut/const标记靠近谁就定义了谁的行为
  • Rust中mut靠近x就代表x可变,也就是指针可变;同理C++中const靠近x就代表x可变,也就是指针不可变。
  • Rust中mut靠近类型T,就代变内容可变;同理C++中const靠近T就代表内容不可变。
Rust C++ 说明
let x : &T const T* const x 指针和内容均不可变
let x : &mut T T* const x 指针不可变,内容可变
let mut x : &T const T* x 指针可变,内容不可变
let mut x : &mut T T* x 指针和内容均可变

举例Rust:

//情况一指针和内容均不可变
pub fn Pconst_Cconst(){
	let x : &i32 = &33; 
	let y : i32 = 34;
	*x = 55; // error 试图改变内容
	x = &y; // error 试图改变指针
}
// 情况二,指针不可变,内容可变
pub fn Pconst_Cmut(){
    let x :&mut i32 = &mut 33; 
	let y : &mut i32 = &mut 34;
	*x = 55; // Ok 可以改变内容
	x = y; // error 试图改变指针
}
// 情况三,指针可变,内容不可变
pub fn Pmut_Cconst(){
    let mut x : &i32 = &33; 
    let mut y : i32 = 34;
    *x = 55; // error 试图改变内容
    x = &y; // Ok 可以改变指针本身
}
// 情况四,指针和内容均可变
pub fn Pmut_Cmut(){
    let mut x : &mut i32 = &mut 33; 
    let mut y : i32 = 34;
    *x = 55; // Ok 可以改变内容
    x = &mut y; // Ok 可以改变指针本身
}

举例C++:

//情况一指针和内容均不可变
void Pconst_Cconst(){
    int i = 33;
    int y = 35;
    const int* const x = &i;
    *x = 34; // error 试图改变内容
    x = &y; // error 试图改变指针
}
// 情况二,指针不可变,内容可变
void Pconst_Cmut(){
    int i = 33;
    int y = 35;
    int* const x = &i;
    *x = 34; // Ok 可以改变内容
    x = &y; // error 试图改变指针
}

// 情况三,指针可变&#
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Rust内存管理优势主要体现在以下几个方面: 1. 零成本抽象:Rust提供了诸多高级抽象特性,如所有权系统、借用检查器和生命周期等,但这些抽象在运行时几乎没有额外的开销。这意味着Rust可以在保证安全性的同时,避免了传统垃圾回收机制引入的运行时开销。 2. 所有权系统:Rust的核心特性之一就是所有权系统。通过所有权系统,Rust确保每块内存只有一个所有者,并且在编译时进行静态检查,避免了数据竞争和内存错误。这使得Rust能够在编译时捕获内存安全问题,而不需要运行时的垃圾回收或引用计数。 3. 借用检查器:Rust的借用检查器确保了对数据的访问是安全和有效的。它通过引入借用规则和生命周期来确保内存的正确使用。借用检查器在编译时检查借用关系,并防止数据竞争和悬垂指针等常见错误。 4. 内存安全性:Rust在编译时保证了内存安全性,避免了常见的内存错误,如空指针引用、野指针访问和缓冲区溢出等。这使得Rust能够提供更高的代码可靠性和稳定性,减少了潜在的安全漏洞。 总体而言,Rust内存管理优势在于其强大而高效的所有权系统和借用检查器,能够在编译时捕获内存错误,并保证内存安全性,同时避免了传统垃圾回收机制引入的运行时开销。这使得Rust成为一种适用于系统级编程和高性能应用的语言选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值