博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc悄无声色将静态函数内联了
阅读量:4317 次
发布时间:2019-06-06

本文共 653 字,大约阅读时间需要 2 分钟。

说到内联,可能你还停在十几年前甚至二十多年前的C++教典,c++有内联关键字inline,甚至还用来与c做区分。c99开始c引入inline,gcc比c99早实现对inline支持,vc中c没有关键字inline,inline只能用于c++,但有另一关键字__inline,但若你要用vc编译gcc下c代码,遇到cl抱怨不识别inline,只要将inline在预编译宏中定义为__inline也就可以了。

gcc编译器属性中还有一个noinline,有了inline为什么还要来一个noinline。没有用inline不就等于noinline了吗。还有always_inline属性。因为在实际中,定义为inline也不一定统统都会被内联,内不内联最后是由gcc编译器决定,只是你的声明会影响它的决定。同样你没有定义为inline,函数就不一定都隔离内联,编译器在优化中通常会为你决定内联了一些函数,不论这个函数体积是大是小。noinline和always_inline属性就是字面意义那样了。

正好近日调试ffmpeg代码,碰上一例子,用来作例证:

ffmpeg是个c代码项目。

avformat_write_header是一个只有十行的函数,就是调用其它函数。

init_muxer是个体积比较大的静态函数,没有定义为内联,却内联到了一个体积很小的函数(avformat_write_header)内。

 

 

转载于:https://www.cnblogs.com/bbqzsl/p/6012330.html

你可能感兴趣的文章
Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子...
查看>>
Android笔记(四十) Android中的数据存储——SQLite(二) insert
查看>>
newcoder【NOIP2018普及组模拟赛第一次】C题
查看>>
关于PC端页面适应不了手机端的问题 解决方案
查看>>
多线程 基本概念
查看>>
电报压缩/解压缩系统
查看>>
[UE4]C++ getter and setter
查看>>
[UE4]机器人射击逻辑行为树
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
Django学习笔记8
查看>>
cadence钻孔文件及光绘文件的生成
查看>>
css实现左右布局
查看>>
[Shader]一个shader效果啦(那个lost soul aside里面看到的)
查看>>
elasticsearch 中文API river
查看>>
Mac OS X 下搭建php开发环境
查看>>
Vue学习之vue中的计算属性和侦听器
查看>>
redis常见面试题
查看>>
C# - XML
查看>>
android权限大全
查看>>
BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
查看>>