ownership

作者: allenhaozi | 来源:发表于2020-04-09 09:47 被阅读0次

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

    无效的引用

    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

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

    相关文章

      网友评论

          本文标题:ownership

          本文链接:https://www.haomeiwen.com/subject/txozphtx.html