Skip to content

运行时环境

本书使用的是不常用的机型, 建议使用其他书进行细致了解

判断运行时环境

静态变量和初始化

进入数据区,为变量进行声明初始化

堆栈帧

一个函数分为三部分

  • 函数序: 执行启动函数的需要的操作, 例如为局部变量保留栈中的内存
  • 函数体: 执行有用的工作
  • 函数跋: 函数返回之前清理堆栈

声明函数,进入函数,把相关的值存入栈中

局部变量声明和函数原型不会产生任何代码, 但是局部变量声明的时候会产生

寄存器变量

寄存器的是有限的, 超出的会被保存在栈, 不同的机器不同, 有的类型太长不能被存放在寄存器之中

外部标识符的长度

外部名字的长短是由链接器确定的, 他有可能会接受所有长度, 但是忽略除了前几个以外的其他字符, 标准要求最少区分六个字符

判断栈帧的分布

传递函数参数

  • 把参数压入栈
  • 记录函数的返回地址

函数序

  • 对旧的寄存器的值进行保存
  • 局部变量的保存

函数跋

  • 恢复寄存器的值
  • 取出原来的地址, 进行返回
  • 清理部分栈,参数并未清除

返回值

根据不同的机器确定

表达式副作用

函数应该返回一个值但是没有填写,有可能会返回一个错误的值, 这个值是计算的时候存储于用于返回的寄存器中

运行时效率

当一个函数的容量超过了内存的数量, 就不能运行

现在的机器使用虚拟内存

现代的编译器在代码优化方面做的很好,因此把时间放在一些小的修改是不值得的

当一个程序运行的速度很慢的时候, 可以对程序使用性能评测

  • 减少用时长的库函数的使用
  • 对调用次数多的短小函数设置寄存器变量
  • 对使用时间长的函数换新的算法

警告

  • 你不能链接不同编译器产生的程序
  • 使用汇编会使得移植姓降低