共计 753 个字符,预计需要花费 2 分钟才能阅读完成。
rust 的变量看着和 c 的有点像但如同又不是齐全像
如下的测试例子,应用 String 模仿堆上的变量,usize 模仿栈上的变量
堆上的内容 move 的时候是不挪动的例如 st3.v1.v.as_str()
始终是在一个地位
栈上的变量看似很像 c 中的指针,然而又不齐全是像 在 rust 中 st3 和 st3.v1 和 st3.v 是三个指针,而这三个指针在 move 之后都会从新生成
move 的操作看起来是 一个变量在栈上 挪动的时候是剖析所有成员都 move 一次,而子成员还有子成员也要迭代往下直到最初一层 在堆上调配一个新的指针 在栈上复制一份值
struct TestSt1 {v: String,}
struct TestSt2 {v: usize,}
struct TestSt3{
v1: TestSt1,
v2: TestSt2,
}
fn get_st() -> (TestSt1, TestSt2, TestSt3){
let st1 = TestSt1{v:String::from("aaa"),
};
let st2 = TestSt2{v:123,};
let st3 = TestSt3{
v1:TestSt1{v:String::from("bbb"),
},
v2:TestSt2{v:321,},
};
println!("p:{:p} {:p} {:p} {:p} {:p} {:p} {:p}",
&st1, &st2, &st3, &(st1.v), &(st2.v), &(st3.v1), &(st3.v2.v));
(st1, st2, st3)
}
fn main() {let (st1, st2, st3) = get_st();
println!("p:{:p} {:p} {:p} {:p} {:p} {:p} {:p}",
&st1, &st2, &st3, &(st1.v), &(st2.v), &(st3.v1), &(st3.v2.v));
}
正文完