在Rust中移动值时,堆栈会发生什么?

时间:2018-05-10 08:27:45

标签: rust stack move

尝试围绕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_vecfunction_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的指针实际上被推了?

0 个答案:

没有答案