深入理解计算机系统——第三章—3.7过程

3.7 过程

过程是软件中的一种很重要的抽象。它提供了一种封装代码的方式,用一组指定的参数和一个可选的返回值实现了某种功能。

3.7.1 运行时栈

C语言使用栈数据结构提供的后进先出的内存管理原则。
这里写图片描述

3.7.2 转移控制

将控制从函数P转移到函数Q只需要简单地把程序计数器(PC)设置为Q的代码的起始位置。
这里写图片描述
call 指令有一个目标,即指明被调用过程起始的指令地址。
示例:
这里写图片描述
这里写图片描述

3.7.3 数据传送

过程调用还可能包括把数据作为参数传递,而从过程返回还有可能包括返回一个值。
这里写图片描述
超出6个参数传递的例子:
这里写图片描述

3.7.4 栈上的局部存储

局部数据必须存放在内存中,常见的情况有:
1) 寄存器不足够存放所有的本地数据;
2) 对一个局部变量使用地址运算符’&‘ ,因此必须能够为它产生一个地址;
3) 某些局部变量是数据或结构,因此必须能够通过数据或结构引用被访问到。
这里写图片描述
这里写图片描述
这里写图片描述

3.7.5 寄存器中的局部存储空间

寄存器是唯一被所有过程共享的资源。
据惯例,寄存器 %rbx %rbp%r12~%r15 被划分为***被调用者保存寄存器***。所有其他的寄存器,除了栈指针 %rsp, 都分类为***调用者保存寄存器***。
示例:
这里写图片描述

3.7.6 递归过程

示例:
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章