- Stack vs Heap(栈内存 vs 堆内存)
Stack(后进先出,LIFO)
Stack上的数据必须拥有已知的固定的大小
大小未知的数据或运行时大小可能发生变化的数据必须存放在heap上
- String类型
//创建String类型的值
使用from函数
let s = String::from("hello"); 这类字符串可以被修改
fn main(){
let mut s = String::from("hello");
s.push_str(", world");
println!("{}", s);//hello, world
}
Rust语言中处理String类型的数据时为了避免二次释放的问题,被赋值的String参数就消失了(一份数据只能有一个拥有者)
举例:
fn main(){
let a = String::from("hello");
let b = a;
println!("{}", b);//hello
println!("{}", a);//报错因为a已经被释放
}
这种方式被称为:移动(Move)
- 引用和借用
举例:
fn main(){
let str = String::from("hello");
let new = &s