检测Rust移动/复制何时涉及实际复制

svmlkihl  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

Rust Copy trait是这样写的:
在幕后,复制和移动都可能导致内存中的位被复制,尽管这有时会被优化掉
文档提供了以下代码供参考:

// We can derive a `Copy` implementation. `Clone` is also required, as it's
// a supertrait of `Copy`.
#[derive(Debug, Copy, Clone)]
struct Foo;

let x = Foo;

let y = x;

// `y` is a copy of `x`

println!("{x:?}"); // A-OK!

1.如何修改这段代码,以便我们可以在运行时检测(并打印)变量(y)是否实际上被复制到内存中或被优化掉(通过重用x的位置)?
1.有没有什么资源可以了解这里发生的事情的内部?

k3bvogb1

k3bvogb11#

如何修改这段代码,以便我们可以在运行时检测(并打印)变量(y)是否实际上被复制到内存中或优化(通过重用x的位置)?
你不能。内存的副本是否被优化掉完全取决于编译器,只要它能证明结果代码是等价的。而且因为结果代码是等价的,所以99%的情况下你不需要关心。
C++允许你通过复制和移动构造函数来检测内存的位置变化。然而,为了简化事情,Rust明确要求结构可以通过简单的内存副本移动,并且没有提供指定自定义移动实现的机制。
有没有什么资源可以了解这里发生的事情的内部?
除了看看LLVM如何优化代码之外,没有。

相关问题