您的位置:首页 > 其它

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

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

内联函数:
对于内联代码,程序无需跳跃到另一个位置处执行代码,然后再跳回来,而是编译器直接将响应的函数代码替换函数调用。
当然,内联函数的运行速度比常规函数快一些,但代价是需要占用更多的内存空间,若在程序中多个地方调用同一个内联函数,该程序需要包含有该函数代码的多次拷贝。由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。
使用内联函数时候,需要在其定义和声明前加上关键字inline(通常做法是将函数定义放在函数声明的地方,这样就省去了函数的声明部分)。注意:在内联函数内不允许循环语句和开关语句(如switch()等),否则会造成代码量增多,违背内联函数初衷。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: