位置: IT常识 - 正文

C++ inline(CINLINELE工具)

编辑:rootadmin
1.inline可以免除函数调用时的保存上下文时的一些开销,其本质就是对此函数的每一个调用都以函数本体替换之。 inline的坏处:若在一台内存有限的机器上,过度热衷inlining会造成程序体积太大,即使拥有虚拟内存,inline造成的代码膨胀也会导致额外的换页行为,降低指令高速缓存装置的集中率, ... 1.inline可以免除函数调用时的保存上下文时的一些开销,其本质就是对此函数的每一个调用都以函数本体替换之。

inline的坏处:若在一台内存有限的机器上,过度热衷inlining会造成程序体积太大,即使拥有虚拟内存,inline造成的代码膨胀也会导致额外的换页行为,降低指令高速缓存装置的集中率,以及伴随这些而来的效率。

但是好处是,如果inline函数的本体很小,编译器针对函数本体所产出的码可能比函数调用所需要的开销等所产出的码更小。那么inlining函数可以导致较小的目标码和较高的指令告诉缓存装置击中率。

inline只是对编译器的一个申请,不是强制命令。这项申请可以隐喻提出,也可以明确提出。

隐喻方式

class person{ public: int age() const {return theAge;} private: int theAge;}

这样的函数通常是成员函数。

明确方式template<typename T>inline const T& std::max(const T& a, const T& b){ return a<b?b:a;}

有关键字在开头。

使用inline后,编译器会根据代码来判断是否可以inlining,inlining在大多数C++程序中是编译期行为。非常少部分是运行期行为。

2.inline是个申请,编译器可加以忽略。大部分编译器拒绝将太过复杂(例如带有循环或递归)的函数inlining,而对所有虚函数(除非是最平淡无奇的)也都会使得inlining落空。因为virtual意味着“等待,直到运行期才确定调用哪个函数”,而inline意味着执行前,先将动作替换为被调用函数的本体。如果编译器不知道该调用哪个函数,则没办法将函数本体inlining。

与此并提的是,编译器通常不对“通过函数指针而进行的调用”实施inlining,这意味着对inline函数的调用有可能被inlined,也可能不被inlined,取决于实施方式。

inline void f() {...}void (*pf) () = f;​...f(); //将被调用,其是一个正常调用pf(); //这个或许不被调用,因为它通过函数指针达成

3.最后,如果想inline类的构造函数,析构函数得再三考虑。因为C++对于“对象被创建和被销毁时发生了什么事”做了各式各样的保证。当你使用new,动态创建的对象被其构造函数自动初始化;当你使用delete,对应的析构函数会被调用。当你创建一个对象,其每一个base class以及每一个成员变量都会被自动构造;当你消费一个对象时,反向程序的析构行为也会自动发生。如果有个异常在对象构造期间被抛出,该对象已构造好的那一部分也会被自动销毁。在这些情况中C++描述了什么一定会发生,但没有说如何发生。事情如何发生事由编译器实现者的权责,不过至少有一点很清楚,那就是他们不可能凭空发生。在你的程序内一定有某些代码能让那些事情发生,而那些代码——由编译器于编译期间代为产生并安插到你的程序中的代码——肯定存在某个地方,有时候就放在你的构造函数和析构函数内。

推荐整理分享C++ inline(CINLINELE工具),希望有所帮助,仅作参考,欢迎阅读内容。

C++ inline(CINLINELE工具)

文章相关热门搜索词:C++ inline后反而变慢了,CINLINELE是什么牌子工具,C++ inline函数的定义一定要写在头文件里面吗?,C++ inline关键字,C++ inline关键字,C++ inline的好处,C++ inline后反而变慢了,C++ inline关键字,内容如对您有帮助,希望把文章链接给更多的朋友!

实际上的Derived()

4.inline函数本质上是将代码在编译期间写入调用函数内,故如果被inline的函数f()更改,那么调用过f()的函数都得重新编译。这是一个大问题,需要考虑。而被调用的函数如果是以正常的头文件调用形式的话(即non_inlined)那么只要修改头文件,重新链接库即可。

本文链接地址:https://www.jiuchutong.com/zhishi/309231.html 转载请保留说明!

上一篇:python中np.insert()函数的使用方法(python中insert函数怎么用)

下一篇:python字典中添加新的键值(python字典添加数据)

  • 统一机构信用代码查询系统
  • 印花税购销合同减半征收政策
  • 行政单位设计费计入哪个科目
  • 费用分割单模板
  • 银行开户许可证图片
  • 小规模纳税人缴纳增值税怎么做账
  • 工伤私了赔偿
  • 房地产增值税怎么算举例说明
  • 业务招待费包括住宿费吗
  • 转让不动产取得的发票
  • 印刷品生产需要生产许可证吗?
  • 特许权使用费如何确认收入
  • 房地产母公司将其土地变更到其全资子公司
  • 增值税小规模纳税人的税率
  • 哪些津贴免征个税
  • 分红未及时扣缴税款要缴滞纳金吗?
  • 收到安装费发票怎么做分录
  • 发票丢了还可以重开吗
  • 招标文件中资金性质应填什么
  • 银行承兑汇票保证金是什么意思
  • 发票金额与实际付款金额不一致
  • win10如何删除windows账户
  • 外地预交增值税退税了如何把申报报表
  • windows无法自动检测网络代理设置该怎么办
  • 免税收入与不征税收入的区别
  • 民办非企业单位是什么企业类型
  • 小规模纳税人销售使用过的固定资产
  • uniapp cover-view
  • 楼房贷款需要什么手续没有银行流水怎么办
  • 怎么处理坏账准备的问题
  • php 表单
  • 企业职工福利费包括哪些内容
  • 财务会计制度或纳税人财务会计核算办法
  • linux中php的作用
  • 赡养老人专项扣除标准
  • 归一化的几种方法
  • 多计提的个人所得税怎么冲回
  • sortable js
  • pytorch卷积操作
  • php读取文件内容的方法和函数
  • 购买金税盘的费用会计分录
  • 中标违约保证金怎么算
  • mongodb集群启动顺序
  • 物流进项发票应纳税额
  • 当月入账的进项税必须当月认证吗
  • sqlserver FOR XML PATH 语句的应用
  • 非同一控制下控股合并入账价值
  • 印花税征税对象是什么
  • 其他应付款做账
  • 未交增值税账务处理
  • 外地预缴税款流程
  • 备用金超过时间会怎么样
  • 企业不如实申报个税的风险
  • mysql5.7解压版安装步骤
  • sql多行合并成一行 oracle
  • 安装nfs命令
  • 苹果电脑dock栏是什么意思
  • windows崩溃后怎么修复
  • MAC OS X Yosemite开启深色模式的方法
  • win8.1网络设置
  • cortana小娜怎么用
  • win7系统开机黑屏只有鼠标且打不开任务管理器
  • win10登陆背景修改器
  • win7格式化怎么操作?
  • 微信小程序自动跳转怎么关闭
  • ajax读取json
  • 批处理文件教程
  • 安卓端数据库
  • 安卓返回按钮图标
  • JavaScript中setMonth()方法的使用详解
  • redis基础教程
  • unity unite
  • python搭建虚拟环境torch
  • android app测试
  • js基于什么
  • Android boot.img制作
  • 深圳国税局官网
  • 给派出所写情况说明房屋情况怎么写啊
  • 三星电视投屏显示不支持当前文件
  • 绍兴柯桥有哪些村
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设