实例构建效率低下

  • 本文关键字:效率 构建 实例 rust
  • 更新时间 :
  • 英文 :


这是一个简单的struct

pub struct Point {
    x: uint,
    y: uint
}
impl Point {
    pub fn new() -> Point {
            Point{x: 0u, y: 0u}
    }
}
fn main() {
    let p = box Point::new();
}

我对构造函数如何工作的理解如下。new() 函数在其本地堆栈中创建 Point 的实例并返回它。此实例中的数据浅表复制到 box 创建的堆内存中。然后将指向堆内存的指针分配给变量 p

我的理解正确吗?是否初始化两个单独的内存区域以创建一个实例?与C++相比,这似乎是一种低效的初始化实例的方法,我们可以直接从构造函数写入实例的内存。

来自相关指南:

您可能会认为这给了我们糟糕的性能:返回一个值,然后立即将其装箱?!这种模式不是两全其美吗?Rust 比这更聪明。此代码中没有副本。Main 为盒子分配足够的空间,将指向该内存的指针作为 x 传递到 Foo,然后 foo 将值直接写入 Box。

这非常重要,值得重复:指针不是用来优化代码中的返回值。允许调用方选择他们想要如何使用您的输出。

虽然这谈到了装箱值,但我相信这种机制足够通用,而不是特定于盒子。

只是为了扩展一下@Shepmaster的答案:

Rust(和 LLVM(支持 RVO,或返回值优化,如果返回值用于像 box 这样的上下文,Rust 足够聪明,可以生成使用某种 out 指针的代码,通过将返回值直接写入其使用站点来避免复制。 box是 RVO 的主要用途之一,但它也可用于其他类型和情况。

最新更新