美文网首页
程序的机器级表示之过程调用2

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

作者: 我就是我啊 | 来源:发表于2018-11-18 21:25 被阅读0次

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

    --准备阶段

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

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

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

    --过程(函数)体

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

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

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

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

        3.在eax中准备返回参数

    --结束阶段

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

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

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

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

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

    相关文章

      网友评论

          本文标题:程序的机器级表示之过程调用2

          本文链接:https://www.haomeiwen.com/subject/kvcnfqtx.html