< 返回版块

Giligency-xl 发表于 2020-10-20 02:48

Tags:References and Borrowing,Ownership,Memory

官网References and Borrowing部分,阅读后有一点疑问。 代码如下

fn main() {
    let s1 = String::from("hello");

    let len = calculate_length(&s1);

    println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

官网中的解释图片

fn calculate_length(s: &String) -> usize { // s is a reference to a String
    s.len()
} // Here, s goes out of scope. But because it does not have ownership of what
  // it refers to, nothing happens.

疑问如下:
如图所示,s指向s1,s1中ptr指向堆中的数据。
我的疑问是,s是有内容的,即ptr,进入函数后,该数据是不是应该压入栈中?
被压入栈中,那么在calculate_length执行完成后虽然不回去释放s1,但是不应该将s的内存分配释放么?
如果官网说的没有问题,那么图中的s的数据否产生?是否被压入栈?是否会被释放?
请大佬答疑解惑,谢谢。


Ext Link: https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#references-and-borrowing

评论区

写评论
作者 Giligency-xl 2020-10-20 06:55

已经解决在https://users.rust-lang.org/t/references-and-borrowing/50349/12

1 共 1 条评论, 1 页