将数据移动到Rc/Arc是否总是将其从堆栈复制到堆?

看下面这个简单的例子:

use std::rc::Rc;

struct MyStruct {
    a: i8,
}

fn main() {
    let mut my_struct = MyStruct { a: 0 };
    my_struct.a = 5;
    let my_struct_rc = Rc::new(my_struct);

    println!("my_struct_rc.a = {}", my_struct_rc.a);
}

的官方文档Rc说:

该类型Rc<T>提供T了在堆中分配的 type 值的共享所有权。

理论上是清楚的。但是,首先my_struct不是立即包装成Rc,其次MyStruct是一个非常简单的类型。我可以在这里看到 2 个场景。

  1. my_struct被移入Rc内存内容时,它会从堆栈中复制到堆中。
  2. 编译器能够解决my_struct将移入 的问题Rc,因此它从一开始就将其放在堆中。

如果数字 1 为真,那么可能存在一个隐藏的性能瓶颈,因为在阅读代码时没有明确看到内存被复制(我假设MyStruct要复杂得多)。

如果数字 2 为真,我想知道编译器是否总是能够解决这些问题。提供的示例非常简单,但我可以想象它my_struct要复杂得多,并且在移动到Rc.

以上是将数据移动到Rc/Arc是否总是将其从堆栈复制到堆?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>