首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rust的选项类型的开销是多少?

Rust的选项类型的开销是多少?
EN

Stack Overflow用户
提问于 2013-05-12 13:59:24
回答 1查看 16.2K关注 0票数 96

在Rust中,引用永远不能为null,因此在实际需要null的情况下,例如链表,您可以使用Option类型:

代码语言:javascript
复制
struct Element {
    value: i32,
    next: Option<Box<Element>>,
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 13:40:34

是的,有一些编译器魔术可以将Option<ptr>优化为单指针(大多数时候)。

代码语言:javascript
复制
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字节):

代码语言:javascript
复制
// 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

注意,&i32Box&[i32]Vec<i32>都在Option中使用了不可为空的指针优化!

票数 100
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16504643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档