码迷,mamicode.com
首页 > 其他好文 > 详细

Rust中文翻译14

时间:2015-07-08 09:35:52      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:rust   编程语言   内存   指针   

Page 71

我们给j,i,h分配了内存.i在堆上,所以是一个指向堆的指针保存在i里.然后再main()函数的结尾,foo()函数被调用:
地址 名字
230   20
... ... ...
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3
x,y,z都得到了各自的内存.参数x拥有和j一样的值,那是因为我们就是这样传参的.它其实是一个指向0地址的指针,因为j指向的是h.

下面,foo()函数调用了baz(),传递了z:
地址 名字
230   20
... ... ...
7 g 100
6 f 4
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3
我们给f和g分配了内存.baz()函数非常短,所以当他结束的时候,我们释放了它的栈帧:
地址 名字
230   20
... ... ...
7 g 100
6 f 4
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3

Page 72

然后,foo()函数调用了bar()函数,参数是x和z:
地址 名字
230   20
(230)-1   5
... ... ...
10 e 9
9 d (230)-1
8 c 5
7 b 4
6 a 0
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3
我们又在堆上分配了另一个空间,所以我们需要再230减1的地方分配.这要比写作1,073,741,823来的容易理解.在任何时候,我们都像平常一样设置变量的值.

在bar()函数的结尾,它又调用了baz():
地址 名字
230   20
(230)-1   5
... ... ...
12 g 100
11 f 4
10 e 9
9 d (230)-1
8 c 5
7 b 4
6 a 0
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3
在这里,我们达到了最深的栈帧!wow!恭喜你跟随我来到了这么远.
当baz()结束的时候,我们释放了f和g的内存:

Page 73

地址 名字
230   20
(230)-1   5
... ... ...
10 e 9
9 d (230)-1
8 c 5
7 b 4
6 a 0
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3
然后,我们从bar()返回.d是一个Box<T>类型,所以它也释放了它所指向的地址:(230)-1.

地址 名字
230   20
... ... ...
5 z 4
4 y 10
3 x 0
2 j 0
1 i 230
0 h 3

在这之后,foo()函数也返回:

地址 名字
230   20
... ... ...
2 j 0
1 i 230
0 h 3
最后,在main()函数结束以后,所有的内存都被清除.当i被释放的时候,堆上的最后一块内存也被清理了.

Rust中文翻译14

标签:rust   编程语言   内存   指针   

原文地址:http://blog.csdn.net/zcmit/article/details/46797551

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!