Appearance
运行时环境
本书使用的是不常用的机型, 建议使用其他书进行细致了解
判断运行时环境
静态变量和初始化
进入数据区,为变量进行声明初始化
堆栈帧
一个函数分为三部分
- 函数序: 执行启动函数的需要的操作, 例如为局部变量保留栈中的内存
- 函数体: 执行有用的工作
- 函数跋: 函数返回之前清理堆栈
声明函数,进入函数,把相关的值存入栈中
局部变量声明和函数原型不会产生任何代码, 但是局部变量声明的时候会产生
寄存器变量
寄存器的是有限的, 超出的会被保存在栈, 不同的机器不同, 有的类型太长不能被存放在寄存器之中
外部标识符的长度
外部名字的长短是由链接器确定的, 他有可能会接受所有长度, 但是忽略除了前几个以外的其他字符, 标准要求最少区分六个字符
判断栈帧的分布
传递函数参数
- 把参数压入栈
- 记录函数的返回地址
函数序
- 对旧的寄存器的值进行保存
- 局部变量的保存
函数跋
- 恢复寄存器的值
- 取出原来的地址, 进行返回
- 清理部分栈,参数并未清除
返回值
根据不同的机器确定
表达式副作用
函数应该返回一个值但是没有填写,有可能会返回一个错误的值, 这个值是计算的时候存储于用于返回的寄存器中
运行时效率
当一个函数的容量超过了内存的数量, 就不能运行
现在的机器使用虚拟内存
现代的编译器在代码优化方面做的很好,因此把时间放在一些小的修改是不值得的
当一个程序运行的速度很慢的时候, 可以对程序使用性能评测
- 减少用时长的库函数的使用
- 对调用次数多的短小函数设置寄存器变量
- 对使用时间长的函数换新的算法
警告
- 你不能链接不同编译器产生的程序
- 使用汇编会使得移植姓降低