gpt4 book ai didi

rust - 在堆上分配一个结构或让一个结构拥有一个堆指针更惯用吗?

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

我有一个占用太多空间的类型,无法在堆栈上分配:

struct Foo {
lots_of_bytes: [u8; 1024 * 10],
bar: bool,
baz: isize,
}

有两个明显的解决方案:

let foo = Box::new(Foo::new());

或者

struct Foo {
lots_of_bytes: Box<[u8; 1024 * 10]>,
bar: bool,
baz: isize,
}

总而言之,我要么在堆上分配整个结构,要么让结构拥有堆指针。这些解决方案中的任何一个都被视为“惯用”解决方案吗?或者它是完全主观的还是取决于上下文?

最佳答案

我认为这里要问自己的问题是:将这个结构放在堆栈中是否有意义?如果答案是否定的,您可能应该在堆上强制分配。为此,您有两种选择:

  1. 使用lots_of_bytes: Box<[u8; 1024 * 10]> .
  2. 使用lots_of_bytes: [u8; 1024 * 10]并确保 Foo 的所有构造函数返回 Box<Foo (因此不可能在堆栈上创建 Foo)。

在我看来,第一种选择要好得多:

  • Foo 的结构定义清楚地表明数据必须存储在堆上。
  • 这只需要装箱lots_of_bytes ,而不是整个结构。这意味着 barbaz将被放置在堆栈上,因此您的间接访问更少。

至于第二种选择,我想不出有什么理由喜欢它,也从未在野外见过它。

关于rust - 在堆上分配一个结构或让一个结构拥有一个堆指针更惯用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43359599/

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