gpt4 book ai didi

performance - Rust 的 Option 类型的开销是多少?

转载 作者:行者123 更新时间:2023-11-29 07:40:04 25 4
gpt4 key购买 nike

在 Rust 中,引用永远不会为 null,因此如果您确实需要 null,例如链表,您可以使用 Option 类型:

struct Element {
value: i32,
next: Option<Box<Element>>,
}

与简单指针相比,在内存分配和取消引用步骤方面,这涉及多少开销?编译器/运行时是否有一些“魔法”可以使 Option 无成本,或者比在非核心库中自己实现 Option 成本更低使用相同的 enum 构造,还是将指针包装在向量中?

最佳答案

是的,有一些编译器魔法可以优化 Option<ptr>到单个指针(大部分时间)。

use std::mem::size_of;

macro_rules! show_size {
(header) => (
println!("{:<22} {:>4} {}", "Type", "T", "Option<T>");
);
($t:ty) => (
println!("{:<22} {:4} {:4}", stringify!($t), size_of::<$t>(), size_of::<Option<$t>>())
)
}

fn main() {
show_size!(header);
show_size!(i32);
show_size!(&i32);
show_size!(Box<i32>);
show_size!(&[i32]);
show_size!(Vec<i32>);
show_size!(Result<(), Box<i32>>);
}

打印了以下大小(在 64 位机器上,因此指针为 8 个字节):

// As of Rust 1.22.1
Type T Option<T>
i32 4 8
&i32 8 8
Box<i32> 8 8
&[i32] 16 16
Vec<i32> 24 24
Result<(), Box<i32>> 8 16

请注意 &i32 , Box , &[i32] , Vec<i32>都在 Option 中使用非空指针优化!

关于performance - Rust 的 Option 类型的开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com