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));
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。