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自动翻译中文rust自动翻译中文,除
欢迎阅读!这本书将教会你使用Rust编程语言。
Rust 核心库和标准库中文翻译 Rust 核心库和标准库中文翻译 Rust 核心库和标准库中文翻译 Rust 核心库和标准库中文翻译 Rust 核心库和标准库中文翻译 ...
官网最新翻译。
Rust 代码和资源的精选列表中文翻译
官网最新翻译。
中文版(Rust by Example)Rust社区官方翻译,翻译精准可靠,非常适合Rust入门学习,主要讲述Rust基本语法
Rust Reference 的中文翻译,预期能及时和原文保持同步rust-reference-master.zip
Steve Klabnik 和 Carol Nichols,以及来自 Rust 社区的贡献(Rust 中文社区翻译) 本书假设你使用 Rust 1.37.0 或更新的版本,且在所有的项目中的 Cargo.toml 文件中通过 edition="2018" 采用 Rust 2018 Edition ...
Rust 核心库和标准库中文翻译,可作为 IDE 工具的智能提示,并生成本地 API 文档
Rust 程序设计语言 简体中文版 ---------------------------------------------------- 本 ePub 基于开源文档,目录书签齐全。 版权归原作者,翻译版权归译者。 --------------------------------------------------...
官网最新翻译。
中文翻译:<rust-lang/rustlings> 帮你扶住 Rust 的那双手 ❤️ ✅
Rustc Dev Guide 中文翻译 的中文翻译已经启动。因为原项目还在变动期,为了翻译方便,所以此翻译项目组织结构就不和原项目保持一致了。志愿者招募要求:热爱 Rust,对 Rust 已经有一定了解想深入了解 Rust 编译器想...
本文档为 The Rust Programming Language 的中文翻译。
Rust编程语言 rust-book 中文翻译 (进行中...) 本项目是对的中文翻译, 力求语言准确,正确还原原文内容,规避任何看起来像机器翻译的句子。 完整书籍: github: 勘误:
:globe_with_meridians: 这是《 The Rust Programming Language》一书的法文翻译 翻译在文件夹中。 其他所有内容都应保留在英语书中(某些必需的文件除外,例如README.md) 。 想要帮助翻译吗? 请阅读文件 ! ...
目前翻译到第十六章, 还在翻译中。。。。。。。。。。
注1:《Rust Cookbook 中文版》翻译自 rust-lang-nursery 团队撰写的 "A Rust Cookbook",感谢 rust-lang-nursery 团队的无私奉献!注2:《Rust Cookbook 中文版》计划为两个阶段:第一阶段:经仔细斟酌,形成专业、...
Rust 核心库和标准库中文翻译,可作为 IDE 工具的智能提示,并生成本地 API 文档