MST

星途 面试题库

面试题:Rust结构体初始化性能考量之中等题

在Rust中,给定两个结构体A和B,A包含一个B类型的成员变量。假设B的初始化较为复杂,占用一定性能。请说明如何在初始化A时,优化B成员变量的初始化,以提升整体性能,并给出代码示例。
33.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 优化思路
    • 可以使用 Lazy 来延迟初始化 BLazy 允许我们在需要使用 B 的实例时才进行初始化,而不是在 A 初始化时就立刻初始化 B
  2. 代码示例
use std::sync::LazyLock;

struct B {
    data: String,
}

impl B {
    fn new() -> Self {
        // 模拟复杂的初始化
        std::thread::sleep(std::time::Duration::from_secs(1));
        B {
            data: "Initialized B".to_string(),
        }
    }
}

struct A {
    b: LazyLock<B>,
}

impl A {
    fn new() -> Self {
        A {
            b: LazyLock::new(|| B::new()),
        }
    }

    fn get_b(&self) -> &B {
        &self.b
    }
}

在上述代码中:

  • B 结构体模拟了初始化复杂的类型,在 new 方法中使用 std::thread::sleep 模拟耗时操作。
  • A 结构体包含一个 LazyLock<B> 类型的成员变量 b
  • A::new 方法中,b 使用 LazyLock::new 进行初始化,LazyLock::new 的闭包中调用 B::new,这意味着只有在第一次访问 b 时,B 才会被初始化。
  • get_b 方法用于获取 B 的引用,此时 B 才会被真正初始化(如果之前未初始化的话)。