创建 Arc 时的编译器优化

问题描述 投票:0回答:1

在下面的代码中,我以两种不同的方式创建了 2 个

Arc
。那么,想知道编译器是否会优化第一个
Arc
创建?

use std::sync::Arc;

#[derive(Debug)]
struct A {
    id: u64,
    a: i32,
    b: f64,
    c: String,
}

impl A {
    fn new(id: u64) -> Self {
        Self {
            id,
            a: 34,
            b: 3.4,
            c: "default".to_string(),
        }
    }
}

fn main() {
    let a_obj = A::new(1);
    
    // a_obj will be moved while creating arc1 which will result in copy operation.
    // So, is this slow compared to the way arc2 is created?
    // Or, compiler will optimize this operation?
    let arc1 = Arc::new(a_obj);
    let arc2 = Arc::new(A::new(2));
}
rust
1个回答
0
投票

arc1
持有一个指向结构体 A 的现有实例
a_obj
的引用计数指针。要优化,您可以进行对象克隆

let arc1 = a_obj.clone();

无需使用

arc2
进行优化,因为 A 的新实例是在 Arc::new() 调用中创建的。

编译器不会优化
arc1
创建克隆,您必须在代码中自行完成。

© www.soinside.com 2019 - 2024. All rights reserved.