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)这个帧指针开始后面保存的其他寄存器的值,如:局部变量等

  • 相关阅读:
    关于互联网产品经理的认知
    互联网产品经理的工作职责
    软件需求分析方法
    Enumeration遍历http请求参数的一个例子
    jquery datatable使用简单示例
    改变输出的文字的字体格式
    excel 类获取起始列和使用列
    调试不能命中断点
    CString转换为const char*
    __declspec(dllexport)
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/4708358.html
Copyright © 2011-2022 走看看