首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“锈书”将一个变量分配给另一个变量,作为对顶层结构的复制?

为什么“锈书”将一个变量分配给另一个变量,作为对顶层结构的复制?
EN

Stack Overflow用户
提问于 2018-04-18 22:01:19
回答 1查看 65关注 0票数 1

section on ownership in 中,Strings表示为有3个字段的结构(其中一个字段是指向实际字节向量的指针)。有一个例子:

代码语言:javascript
复制
let s1 = String::from("hello");
let s2 = s1;

本书解释为将s1中包含的3字段结构复制到s2 (但不是字节向量),然后将s1中包含的结构标记为“无效”(图4-4)。

为什么它以这种方式出现,而不是将s2表示为指向与s1相同的顶层结构,然后将s1标记为“无效”?

这种交替表示是否会导致语义上的明显差异(或者甚至会导致问题)?如果没有,是否因为它更好地反映了底层的实现?如果是这样的话,为什么要执行这样的复制操作呢?

EN

回答 1

Stack Overflow用户

发布于 2018-04-18 22:15:31

为什么它是这样呈现的

因为这是一种非常接近(如果不是精确的话)建模Rust的所有权和移动语义的方法。

这种交替的表示方式会导致语义上的明显差异吗?

是。铁锈的当前语义表明,当变量被移动时,不能保证它保持在相同的地址上。您的替代演示文稿将向读者建议地址肯定是相同的(“因为图片告诉我的!”)。

这不可能是每一步的情况,所以不值得教人们误导语义学。很难准确地指出具体情况,但我预计这种价值转移的可能性会更大:

  • 在线程间传输它们
  • 从函数返回值-尽管(命名)返回值优化可以阻止这一点。
  • 当这个值“非常小”时,复制它比取消引用内存更便宜。

为什么要执行这样的复制操作呢?

implementation不一定要复制。虽然语义不能保证地址保持不变,但它们也不强制它必须更改。事实上,优化器会花费时间尽量减少所有不必要的副本。有关的特别例子极有可能不涉及任何副本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49909664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档