我有一个类型占用太多空间来分配堆栈:
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,
}
总而言之,我要么在堆上分配整个结构,要么我可以让结构拥有堆指针.这些解决方案中的任何一个都被认为是"惯用"解决方案吗?或者它是严格主观的还是依赖于背景?
我想在这里问自己的问题是:将这个结构放在堆栈中是否有意义?如果答案是否定的,您应该在堆上强制执行分配.要实现这一目标,您有两种选择:
lots_of_bytes: Box<[u8; 1024 * 10]>.lots_of_bytes: [u8; 1024 * 10]并确保所有Foo返回的构造函数Box<Foo(因此无法Foo在堆栈上创建).在我看来,第一种选择更好:
Foo清楚地表明数据必须存储在堆上.lots_of_bytes,而不是整个结构.这意味着,bar和baz将被放置在栈上,让你拥有更小的间接.至于第二种选择,我想不出任何理由偏爱它,也从未在野外见过它.