在这段代码中...
struct Test { a: i32, b: i64 }
fn foo() -> Box<Test> { // Stack frame:
let v = Test { a: 123, b: 456 }; // 12 bytes
Box::new(v) // `usize` bytes (`*const T` in `Box`)
}
... 据我所知(忽略可能的优化),v
在堆栈上分配,然后复制到堆中,然后以Box
的形式返回.
这个代码...
fn foo() -> Box<Test> {
Box::new(Test { a: 123, b: 456 })
}
...应该不会有任何不同,因为应该有一个用于 struct 分配的临时变量(假设编译器对Box::new()
中的实例化表达式没有任何特殊语义).
我找到了Do values in return position always get allocated in the parents stack frame or receiving Box?个.关于我的具体问题,它只提出了实验性的box
语法,但主要讨论了编译器优化(复制省略).
所以我的问题仍然是:使用stable Rust,如何在不依赖编译器优化的情况下直接在堆上分配struct
?