说到内联,可能你还停在十几年前甚至二十多年前的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)内。

最新文章

  1. 简单谈一谈JavaScript中的变量提升的问题
  2. ArcEngine中打开各种数据源(WorkSpace)的连接
  3. 使用Graphviz绘图(一)
  4. 小试ildasm,ilasm,ilspy
  5. C#调用杀毒软件MSE扫描指定目录或文件
  6. JSBinding + SharpKit / Important Notes
  7. Jquery 对象转json ,Json转对象。兼容浏览器。
  8. CF 314C Sereja and Subsequences(树状数组)
  9. (转)IIS设置优化(需根据服务器性能,调整具体参数值)
  10. sql语句常见错误
  11. Oracle的commit详解(转)
  12. 第一贱-UILabel
  13. There was a problem parsing the package(android)
  14. IE10 特有 MSGesture() 方法
  15. ubuntu14.04 64位 安装eclipse
  16. Vue依赖收集引发的问题
  17. IO通信模型(二)同步非阻塞模式NIO(NonBlocking IO)
  18. javascript 之 第七章第一节(递归)
  19. python基础学习(九)字典
  20. Python学习之旅(十三)

热门文章

  1. TensorFlow2.0(9):TensorBoard可视化
  2. 第一个shell脚本(一)
  3. 基于docker的mysql8的主从复制
  4. GStreamer基础教程12 - 常用命令工具
  5. 阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?
  6. ORM之单表操作
  7. 小白学 Python(14):基础数据结构(集合)(上)
  8. 【IDEA】IDEA自动生成文档注释的设置方法
  9. centOS7 永久关闭防火墙
  10. activeMQ 安装及启动异常处理