内联函数 inline

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值