内联函数 inline

来源:互联网 发布:caffe fcn边缘 编辑:程序博客网 时间:2024/06/05 16:33
inline 函数 :对此函数的每一个调用 都以 函数本体 替换之【1】简介 : inlining函数通常一定被置于头文件内,因为大多数建置环境 在 编译过程 中 进行 inlining行为        inlining在大多数 C++程序中是编译器行为【2】缺点 :增加你的 目标码的 大小 (一台 内存 有限的 机器上 ,inlining会造成 程序体积太大)       inline造成的 代码膨胀 会 导致 额外的 换页行为,降低 指令高速缓存装置的 击中率,以及伴随 一些 效率 损失【3】优点 :如果函数 本体 很小 ,inlining确实 可能 导致 较小的 目标码 和 较高的指令高速缓存装置 集中率【4】几个要点:      一:Template的 具现化与 inlining无关      原因 :所有根据 此template 具现化 出来的函数 需要内联  才应该是 inlined      二:virtual函数 不是 inlining      原因 :virtual 意味 直到运行期 才确定 调用哪个函数             inline 意味 执行期前 调用动作替换为 被调用函数 本体      三 :如果程序要取某个 inline 函数的 地址 ,编译器通常必须为此函数 生成一个outlined函数本体           inline void f(){}           void (*pf)() = f;           f();       //是 inlined           (*pf)();  //不是 inlined      四 :有时候编译器会生成 构造函数 和 析构函数的 outlined副本      五 :inline 函数无法随着程序库的升级而升级           原因 :[1]如果f是程序库内的 inline 函数,改变非 f ,所有 用到f的客户端 程序 必须重新编译                  [2]如果 f 是 non-line 函数 ,一旦有修改 ,客户端只需 重新连接 就好,远比重新编译的 负担少很多                  [3]如果 程序 动态链接库 ,升级版函数 甚至 可以不知不觉 地 被应用程序 吸纳      六 :大部分 调试器 面对 inline 函数 都 束手无策【5】总结 :一 :将大多数 inlining 限制在小型 ,被频繁调用的 函数 身上 。            这可使日后 的 调试过程 和 二进制 升级 更容易 ,            也可使 潜在 的 代码膨胀 问题 最小化,是程序 的 速度 提升机会 最大化 。            二 :不要因为 function templates 出现 在 头文件 ,就将他们 声明 为 inline

1 0
原创粉丝点击