程序的机器级表示之过程调用2

2018-11-18  本文已影响0人  我就是我啊

一个c过程的大致过程如下:

--准备阶段

    1.形成帧底:push指令和mov指令

    2.形成栈帧(如果需要的话):sub指令或and指令

    3.保存现场(如果有被调用者保存寄存器):mov指令

--过程(函数)体

    1.分配局部变量空间,并赋值

    2具体处理逻辑:如果遇到函数调用时

        --准备参数:将实参送栈帧入口参数处

        --call指令:保存返回地址并转被调用函数

    3.在eax中准备返回参数

--结束阶段

    1.退栈:leave指令或pop指令

     2.取返回地址返回:ret指令

    返回地址:call指令的下一条指令的地址

过程调用由过程体实现,为支持过程调用,每个过程包含准备阶段和结束阶段,因而每增加一次过程调用,就要增加许多条包含在准备阶段和结束阶段的额外指令,他们对程序性能影响很大,应尽量避免不必要的过程调用,特别是递归调用。

想到个问题:写java程序时经常会把某些代码抽取出来,做为通用方法来调用,,这样会影响性能吗??

上一篇下一篇

猜你喜欢

热点阅读