在这段代码...
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`)
}
Run Code Online (Sandbox Code Playgroud)
...据我所知(忽略可能的优化),v在堆栈上分配然后复制到堆中,然后以Box.
而这段代码...
fn foo() -> Box<Test> {
Box::new(Test { a: 123, b: 456 })
}
Run Code Online (Sandbox Code Playgroud)
...应该没有任何不同,大概是因为应该有一个用于结构分配的临时变量(假设编译器对内部的实例化表达式没有任何特殊语义Box::new())。
我发现返回位置的值总是在父堆栈帧或接收框中分配吗?. 关于我的具体问题,它只提出实验性box语法,但主要讨论编译器优化(复制省略)。
所以我的问题仍然存在:使用稳定的Rust,如何struct在不依赖编译器优化的情况下直接在堆上分配s?
rust ×1