gcc悄无声色将静态函数内联了


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

相关推荐: 简述PAM模块认证

简述PAM模块认证Pam可插拔的认证模块接口文件在/etc/pam.d/目录下调用的模块文件/lib/security目录下模块的配置文件/etc/security/目录下日志信息存放在/var/log/secrue网络中的很多用户需要对我们的服务器进行远程管…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/28 18:41
下一篇 01/28 18:41