现在的位置: 首页 > 综合 > 正文

常规及内联函数调用过程详解

2013年10月30日 ⁄ 综合 ⁄ 共 525字 ⁄ 字号 评论关闭


常规函数:

当程序执行到调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需将函数的返回值放入到寄存器中),然后跳回到地址被保存的指令处(这与阅读文章时停下来看看脚注,并在阅读完脚注后返回到以前阅读的地方类似)。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。


内联函数:

对于内联代码,程序无需跳跃到另一个位置处执行代码,然后再跳回来,而是编译器直接将响应的函数代码替换函数调用。

当然,内联函数的运行速度比常规函数快一些,但代价是需要占用更多的内存空间,若在程序中多个地方调用同一个内联函数,该程序需要包含有该函数代码的多次拷贝由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。

使用内联函数时候,需要在其定义和声明前加上关键字inline(通常做法是将函数定义放在函数声明的地方,这样就省去了函数的声明部分)。注意:在内联函数内不允许循环语句和开关语句(如switch()等),否则会造成代码量增多,违背内联函数初衷。

 

抱歉!评论已关闭.