Rust哪些数据保存了一个已为其分配结构的变量
如果我们有以下代码:
struct Person {
age: i32
}
fn main() {
let person = Person{age : 52};
}
我知道如何使用结构体以及除了 person 变量中的实际内容之外的所有内容?
它是指向结构第一个元素的指针吗?(因为所有元素都是连续的(?)所以编译器会知道所有元素在哪里)
回答
在 person 变量中究竟是什么?
“内部”唯一的东西是age,总共 4 个字节。
它是指向结构第一个元素的指针吗?
不,它不是指针。实际上,它只是值本身,这意味着它将存储在当前帧/函数的堆栈中(如果可观察行为没有改变,编译器可能会将其从内存中完全删除,甚至不使用它,但是是一种优化:概念上,变量被放置在堆栈中)。
(因为所有元素都是连续的(?)所以编译器会知道所有元素在哪里)
大多数编译语言中的编译器总是知道所有类型的确切布局(特殊情况除外)。这就是可以提前在这些语言中完成许多优化的原因。这些信息通常在系统编程语言中被丢弃,这就是为什么它们通常不支持反射并且很难将它们反编译回源代码的原因。