zoukankan      html  css  js  c++  java
  • 深入理解计算机操作系统——第3章:程序编码,过程调用(程序栈)

    3.1 linux采用平坦寻址的方式,及程序员将整个存储空间看做一个大的字节数组

    3.2 程序编码

    程序需要经过:

         预处理器 :将#include还有#define宏进行处理(扩展)

         编译器: 产生源代码的汇编代码code.s 

         汇编器:  目标代码(是机器码的一种形式),包含所有的指令的二进制形式,只是还没有填入地址全局值

         链接器:将所有目标代码文件与所需库文件代码合并,最终得到可执行目标文件

    机器级程序使用的存储地址是虚拟地址,机器代码只是将存储器看做一个很大的,按字节寻址的数组。

    3.7 过程:

    过程含义

    (1)一个过程的调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另外一部分。

    (2)必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。

    这些都是通过程序栈来实现的:

     

    (1)机器用栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及本地存储

    (2)为单个过程分配的那部分栈称为“栈帧“。

     程序的调用过程

    P:

    (1)假设过程P(调用者)调用过程Q(被调用者),则Q的参数放在P的栈帧中。

    (2)当P调用Q时,P的返回地址压入栈中,形成P的栈帧末尾。

           返回地址:当程序从Q返回应该继续执行的地方。

    Q:

    (3)Q的栈帧从保存的帧指针的值开始(如上图的%ebp)

    (4)这个帧指针开始后面保存的其他寄存器的值,如:局部变量等

  • 相关阅读:
    hdu--1231--并查集<连分量的个数>
    hdu--1272--并查集||图的特点
    hdu--1856--并查集的离散化处理
    hdu--1285 && 4857 --正向 || 逆向拓扑排序 && 优先队列
    hdu--1671--字典树<出现mle怎么解决>
    CF260--C--dp<最大不连续子序列和>
    Hibernate之级联关系配置的作用
    调用JS的方法
    Hibernate映射关系之多对多
    Hibernate映射关系之一对多
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/4708358.html
Copyright © 2011-2022 走看看