一个c过程的大致过程如下:
--准备阶段
1.形成帧底:push指令和mov指令
2.形成栈帧(如果需要的话):sub指令或and指令
3.保存现场(如果有被调用者保存寄存器):mov指令
--过程(函数)体
1.分配局部变量空间,并赋值
2具体处理逻辑:如果遇到函数调用时
--准备参数:将实参送栈帧入口参数处
--call指令:保存返回地址并转被调用函数
3.在eax中准备返回参数
--结束阶段
1.退栈:leave指令或pop指令
2.取返回地址返回:ret指令
返回地址:call指令的下一条指令的地址
过程调用由过程体实现,为支持过程调用,每个过程包含准备阶段和结束阶段,因而每增加一次过程调用,就要增加许多条包含在准备阶段和结束阶段的额外指令,他们对程序性能影响很大,应尽量避免不必要的过程调用,特别是递归调用。
想到个问题:写java程序时经常会把某些代码抽取出来,做为通用方法来调用,,这样会影响性能吗??