如何知道一个函数在编译后是否被inline了?

fibbery 2011-11-20 10:39:54
如何知道一个函数在编译后是否被inline了?
...全文
745 点赞 收藏 30
写回复
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
反编译看汇编代码是否生成了函数体,是否有函数调用。
回复
听编译器的 他说内联就内敛
回复
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
不最优化编译代码,那还有神马实际意义。
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告