尝试围绕Rust所有权系统以及编译器如何实现它。请考虑以下示例:
fn main() {
let my_vec = vec![1, 2, 3];
let x = 5;
let y = 3.7;
function_that_takes_ownership(my_vec);
}
fn function_that_takes_ownership(Vec<i32> vec) {
// ...
}
调用my_vec
时function_that_takes_ownership
占用的堆栈内存实际发生了什么?
我想,在调用之前,堆栈应该如下所示:
+-----------+
| ... |
+-----------+
| my_vec | // contains size, capacity and a pointer to heap
+-----------+
| x |
+-----------+
| y |
+-----------+ <--- stack pointer points to here
调用function_that_takes_ownership
时会发生什么? my_vec
副本是否会再次被推送到堆栈,而旧位置现在被视为未使用?或者可能指向my_vec
的指针实际上被推了?