小编mrn*_*ver的帖子

如何在稳定的 Rust 中在不占用堆栈空间的情况下在堆上分配结构?

在这段代码...

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

9
推荐指数
2
解决办法
1377
查看次数

标签 统计

rust ×1