社区
C++ 语言
帖子详情
如何知道一个函数在编译后是否被inline了?
fibbery
2011-11-20 10:39:54
如何知道一个函数在编译后是否被inline了?
...全文
1273
30
打赏
收藏
如何知道一个函数在编译后是否被inline了?
如何知道一个函数在编译后是否被inline了?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
如何识别代码
是否
被
inline
了?
本文作为帖子《如何
知道
一个
函数
在
编译
后
是否
被
inline
了? [》的总结,写入我的学习笔记博客,供需要的人包括自己查阅(好记性不如烂笔头子)。 要
知道
函数
是否
被
inline
,首先要打开
编译
器的
inline
功能,其次,要...
inline
函数
及
编译
控制
调试新工具链时,遇到了
一个
inline
函数
编译
问题,定义
inline
函数
,调用时报该
函数
未定义。在
编译
选项上增加-fgnu89-
inline
后,即可正常
编译
。其实
inline
函数
就是对
编译
方式的控制,
inline
函数
的几种定义方式,及
编译
...
C++基础:
inline
函数
编译
器在
编译
阶段完成对
inline
函数
的处理,即对
inline
函数
的调用替换为
函数
的本体。但
inline
关键字对
编译
器只是一种建议,
编译
器可以这样去做,也可以不去做。从逻辑上来说,
编译
器对
inline
函数
的处理步骤...
静态库
编译
inline
函数
后,该
函数
是不可见的
不过理论上,按照
inline
的定义,
inline
函数
编译
以后是不可见的,直接展开成一串代码了啊。
inline
函数
只能写在头文件里,即每个c里面都需要
编译
一份。 如果写在c里面的话,是不会
编译
的,导致在调用的静态库...
内联
函数
inline
分文件
编译
报错的原因
内联
函数
是不能分文件
编译
的。 如果使用
函数
内联,则必须在包括的头文件中实现内联
函数
。 如果非要分文件
编译
,比如
函数
声明为内联: //Add.h
inline
int Add(int a,int b); //Add.cpp #include"Add.h" int Add...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章