ownership

2020-04-09  本文已影响0人  allenhaozi

堆和栈是代码在运行时, 可供使用的内存, 但是他们的结构不同

无效的引用

let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);

有效的引用

let x = 5;
let y = x;
println!("x = {}, y = {}", x, y);

原因是像整型这样的在编译时已知大小的类型被整个存储在栈上,所以拷贝其实际的值是快 速的。这意味着没有理由在创建变量 y 后使 x 无效


编译时大小未知或者大小可变的数据存储在堆上

Rust ownership

  1. Rust中每个值都有一个被称为其所有者的(owner)的变量
  2. 值有且只有一个所有者
  3. 当所有者(变量)离开作用域, 这个值被丢弃
# 成功的例子
let a = "allen";
let b = a;

print!("you input is : {}\n",b);

# 失败的例子
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);

上面这个示例会报错, 因为rust为了确保内存安全, 与其尝试拷贝被分配的内存, rust认为s1不在有效,


string-storage

左边是栈上的, 右边是堆上的

上一篇下一篇

猜你喜欢

热点阅读