【发布时间】:2020-11-24 16:00:09
【问题描述】:
我读到 Rust 中的内存默认分配在堆栈上,除非通过使用 Box 或其他方法明确告诉编译器使用堆。
我知道所有权在函数调用之间移动,但实际分配的结构内存在哪里?如果在栈上,函数退出时会发生什么?
#[derive(Debug)]
struct Foo(i32);
#[derive(Debug)]
struct Bar(Foo);
fn foo() -> Foo {
Foo(42)
}
fn bar() -> Bar {
let f = foo();
Bar(f)
}
fn main() {
let bar = bar();
println!("{:?}", bar);
}
例如,在第 12 行,在 bar() 函数的堆栈帧中分配了一个 Foo 结构。当bar() 退出时,堆栈被展开,内存被回收。由于struct没有实现Copy,所以内存没有被复制,那么它去哪里了呢?
我认为这里有一个我不明白的基本概念。
【问题讨论】: