社区
C++ 语言
帖子详情
如何知道一个函数在编译后是否被inline了?
fibbery
2011-11-20 10:39:54
如何知道一个函数在编译后是否被inline了?
...全文
1370
30
打赏
收藏
如何知道一个函数在编译后是否被inline了?
如何知道一个函数在编译后是否被inline了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fibbery
2011-11-24
打赏
举报
回复
[Quote=引用 29 楼 zhao4zhong1 的回复:]
不优化已经inline了,优化之后还真不一定inline。因为万一是Size优化呢?
……
[/Quote]
/O1(最小化大小)等价于 /Og /Os /Oy /Ob2 /Gs /GF /Gy 在多数情况下创建最小的代码。
/O2(最大化速度)等价于 /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy 在多数情况下创建最快的代码。(发布版本的默认设置)
赵4老师
2011-11-24
打赏
举报
回复
[Quote=引用 26 楼 fibbery 的回复:]
引用 25 楼 taodm 的回复:
不最优化编译代码,那还有神马实际意义。
晕,不优化都已经inline了,你说优化之后呢?
我这里说不使用优化选项只是为了不让优化过程连inline都优化掉,以便检查指定的函数是否被inline了,而已。
[/Quote]
不优化已经inline了,优化之后还真不一定inline。因为万一是Size优化呢?
qs_coding
2011-11-23
打赏
举报
回复
不用内联函数就是了,确实需要内联的,就用宏吧。
zzcmx2008
2011-11-20
打赏
举报
回复
内联是建议性的,需要看编译器的实现
Terenceliqiang
2011-11-20
打赏
举报
回复
反汇编 。。。其实很多时候你的小函数在release下 都是直接内联了的!。。。不管你有没有声明inline
xunxun
2011-11-20
打赏
举报
回复
反正看反汇编最准
因为有编译器的规则不同/编译开关不同/INLINE的等级不同/FORCE INLINE的情形
所以反汇编前无法判断
healer_kx
2011-11-20
打赏
举报
回复
[Quote=引用 2 楼 xunxun1982 的回复:]
反汇编看看有没有相关的函数调用call
没有就是inline了
[/Quote]
嗯。
qq120848369
2011-11-20
打赏
举报
回复
忘掉inline即可,不知道就可以不担心.
xhjbeidoulong
2011-11-20
打赏
举报
回复
总结一下:
1. 上楼对inline的说法比较准确;(只是建议,会缩合考虑)
(但楼上说一个跳转语句是错的, 内联与宏差不多, 代码直接展开, 没有call, 没有jmp)
2. 5楼也说的对,编译器有选项:可以不做任何内联,可以只对inline的尝试内联,可以对任何适合的进行内联;
3. 要看真正有没有内联,好像只能看汇编代码了;
要全面知道,可以做个二制制分析工具;(查找一块二进制数据, 查找call xxxx, 但如果代码优化厉害的话,展开的那部份代码,可能各不相同)
JieTouLangRen
2011-11-20
打赏
举报
回复
声明为Inline只是对编译器提出一个建议,建议编译器进行内联,
而具体会不会内联,由编译器决定,编译器会综合考虑更方面因素来判断要不要进行内联
应该能在汇编代码中看出来,内联将函数代码copy一份,而函数调用应该是一个跳转语句
对象
2011-11-20
打赏
举报
回复
反编译看汇编代码是否生成了函数体,是否有函数调用。
快乐的小菜鸟
2011-11-20
打赏
举报
回复
听编译器的 他说内联就内敛
blink31
2011-11-20
打赏
举报
回复
高深的问题啊~
Ethan_Jnu
2011-11-20
打赏
举报
回复
是否内联 可以在 编码 编译 连接 甚至是应用程序的安装 进行的。 声明的内联的函数 不一定会被内联。反正 没有声明为内联的函数 可以 被内联的。
fibbery
2011-11-20
打赏
举报
回复
[Quote=引用 25 楼 taodm 的回复:]
不最优化编译代码,那还有神马实际意义。
[/Quote]
晕,不优化都已经inline了,你说优化之后呢?
我这里说不使用优化选项只是为了不让优化过程连inline都优化掉,以便检查指定的函数是否被inline了,而已。
xunxun
2011-11-20
打赏
举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
代码中就知道是否被inline,为什么还编译后去知道那
[/Quote]
编译器可以拒绝内联
bdmh
2011-11-20
打赏
举报
回复
代码中就知道是否被inline,为什么还编译后去知道那
xunxun
2011-11-20
打赏
举报
回复
反汇编看看有没有相关的函数调用call
没有就是inline了
Ethan_Jnu
2011-11-20
打赏
举报
回复
好像很难吧,因为 是否 inline 在很多时间段 都有的。
taodm
2011-11-20
打赏
举报
回复
不最优化编译代码,那还有神马实际意义。
加载更多回复(10)
C++
inline
函数
本文深入探讨C++中的
inline
函数
,介绍其定义、
编译
器处理方式及使用方法,并对比宏
函数
,阐述
inline
函数
的优缺点。此外,还提供了实用的注意事项和建议。
inline
函数
的总结
本文深入探讨C/C++中内联
函数
的原理及应用,解析如何通过
inline
关键字优化频繁调用的小
函数
,减少栈空间消耗,提升程序运行效率。同时,详细介绍了内联
函数
的使用限制、
编译
器处理方式及最佳实践。
C++基础:
inline
函数
本文详细介绍了C++中的
inline
函数
,包括定义、
编译
器处理方式、使用方法、优缺点以及注意事项。
inline
函数
用于提高简单且频繁使用的
函数
效率,通过在调用点展开代码。然而,
编译
器并不保证一定会进行内联处理,且内联
函数
不适合大型或递归
函数
。此外,内联
函数
与宏、普通
函数
和static
函数
存在显著区别。
C语言:
inline
,static
inline
本文详细探讨了C语言中
inline
、static
inline
和extern
inline
的区别,通过实例分析了这些内联
函数
在
编译
过程中的行为,解释了如何正确使用内联
函数
以优化程序性能。
inline
函数
及
编译
控制
本文探讨了C语言中的
inline
函数
及其
编译
控制问题。在调试新工具链时,作者遇到
inline
函数
未定义的
编译
错误,通过添加-fgnu89-
inline
选项得以解决。文章介绍了
inline
、extern
inline
和static
inline
三种定义方式的差异,以及GNU89和C99标准下的不同行为。同时,指出了使用
inline
函数
需要注意的几点:
函数
实现必须在调用文件中、
函数
应保持简洁以避免线程栈问题,并在平台移植时关注
编译
选项和工具链版本。
C++ 语言
65,211
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章