运行时环境

运行时环境

堆栈帧

       一个函数分成三个部分:函数序prologue、函数体body和函数跋epilogue

l  函数序prologue:用于执行函数启动需要的一些工作,例如为局部变量保留堆栈中的内存;

l  函数体body:用于执行有用工作的地方;

l  函数跋epilogue:用于在函数即将返回之前清理堆栈;

C和汇编语言的接口

为了从汇编语言程序调用C程序:

l  如果寄存器d0d1a0a1保存了重要的值,它们必须在调用C程序之前进行保存,因为C函数不会保存它们的值;

l  任何函数的参数必须以参数列表相反的顺序压入堆栈中;

l  函数必须由一条跳转子程序类型的指令调用,它会把返回地址压入到堆栈中;

l  C函数返回时,汇编程序必须清楚堆栈中的任何参数;

l  如果汇编程序期望接收一个返回值,它将保存在d0(如果返回值的类型为double,它的另一半将位于d1);

l  任何在调用之前进行过保存的寄存器此时可以恢复;

 

为了编写一个由C程序调用的汇编程序:

Ø  保存任何你希望修改的寄存器(d0d1a0a1除外);

Ø  参数值从堆栈中获得,因为调用它的C函数把参数压入在堆栈中;

Ø  如果函数应该返回一个值,它的值应该保存在d0中;

Ø  在返回之前,函数必须清除任何它压入到堆栈中的内容;

运行时效率

       现代的计算机系统提供了虚拟内存Virtual Memory),虚拟内存是由操作系统实现的,它在需要时把程序的活动部分放入内存并把不活动的部分复制到磁盘中,这样就允许系统运行大型的程序。但程序越大,需要进行复制的就越多,也就会导致执行效率的降低。

如果一个程序太大,可以从最大的函数和数据结构入手;

如果一个程序太慢,可以对程序进行性能评测,找到程序中花费时间最多的那部分进行优化;

总结

       提高程序效率的最好方法是为它选择一种更好的算法。