< 返回版块

Snowmanzzz 发表于 2023-03-26 10:24

评论区

写评论
作者 Snowmanzzz 2023-03-26 21:42

so pro!

--
👇
hax10: 所有权和转移

在进行赋值(let x = y)或通过值来传递函数参数(foo(x))的时候,资源的所有权(ownership)会发生转移。按照 Rust 的说法,这被称为资源的移动(move)。

你应该想问的是,Rust数据的所有权被转移到新变量时,这块数据一定会被复制到新内存地址吗?

一般会,除非Rust编译器能优化掉这次复制粘贴的操作。根据我的经验,被优化掉的概率不大。要注意:

  1. 复制的资源不是堆上的数据,而是指向它的指针而已。你可以参考上面链接提的关于Box的例子。这样,转移的时间和空间成本有所保障。

  2. 变量的赋值不一定涉及到所有权的转移,比如你用mut定义一个可变变量之后,每次给此变量重新赋值不会改变原本数据的内存地址又不会动它的所有权。

hax10 2023-03-26 15:54

所有权和转移

在进行赋值(let x = y)或通过值来传递函数参数(foo(x))的时候,资源的所有权(ownership)会发生转移。按照 Rust 的说法,这被称为资源的移动(move)。

你应该想问的是,Rust数据的所有权被转移到新变量时,这块数据一定会被复制到新内存地址吗?

一般会,除非Rust编译器能优化掉这次复制粘贴的操作。根据我的经验,被优化掉的概率不大。要注意:

  1. 复制的资源不是堆上的数据,而是指向它的指针而已。你可以参考上面链接提的关于Box的例子。这样,转移的时间和空间成本有所保障。

  2. 变量的赋值不一定涉及到所有权的转移,比如你用mut定义一个可变变量之后,每次给此变量重新赋值不会改变原本数据的内存地址又不会动它的所有权。

1 共 2 条评论, 1 页