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

fibbery 2011-11-20 10:39:54
如何知道一个函数在编译后是否被inline了?
...全文
1159 30 打赏 收藏 转发到动态 举报
写回复
用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)

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧