inline 为什么没有效果?

hziee_ 2007-05-30 08:37:54
我写了以下测试函数
inline int RoundFloatToInt(float f);

int RoundFloatToInt(float f)
{
int nResult;

__asm
{
fld f
fistp nResult
}
return nResult;
}

int main()
{
float f = 3.14188952f;
unsigned int t_start = timeGetTime();

for( int i=0; i<1000000; i++)
{
int k = (int)f;
}
unsigned int t_end = timeGetTime();

cout<<"force convert : "<< t_end - t_start<<endl;

t_start = timeGetTime();

for( int i=0; i<1000000; i++)
{
int k = RoundFloatToInt(f);
}

t_end = timeGetTime();

cout<< " asm convert: "<<t_end -t_start<<endl;
system("pause");
}

本来想看看优化后的float 2 int的有多少效率优势。
但当我看到force convert 14
asm convert 45 是,觉得结果不是我想要的。
再看汇编代码时发现做了很多函数的调用压栈等操作,所以速度就蛮下来了。
我再把inline关键字去掉 RoundFloatToInt函数的汇编代码一样。耗时在50左右。

那inline跟不inline不就一样了吗?
ps:我如果直接把RoundFloatToInt里的代码直接写到for循环里,耗时只有5;
...全文
639 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
a013231 2007-09-07
  • 打赏
  • 举报
回复
inline只是一种建议,不是一种要求.
是否inline还要编译器决定的.
jxlczjp77 2007-09-07
  • 打赏
  • 举报
回复
楼主实在debug模式下测试的吧,换成release可能就行了。
另外inline只是给编译器的建议,编译器可以根据情况选择是否真的inline。
ddc 2007-09-07
  • 打赏
  • 举报
回复
这种简单的Debug不内联,Release会。
iambic 2007-09-07
  • 打赏
  • 举报
回复
不要以为加了inline编译器就给你inline。
sjjf 2007-09-07
  • 打赏
  • 举报
回复
mark
loongee 2007-05-31
  • 打赏
  • 举报
回复
汇编不清楚哈。

在C++编译器里:
对函数作inline声明,只是程序设计者对编译系统提出的一个建议,而不是指令性的。并非一经指定为inline编译系统就一定会这样做。它会根据具体情况决定是否这样做。
只有规模较小而被调用频繁的简单函数,才适合于作内联函数。

另外,内联函数里是不可以有循环语句和switch语句的。
虽然编译器并不报错,程序也不会出错。
星羽 2007-05-31
  • 打赏
  • 举报
回复
debug 不会优化的好象

release 会

不过好象不是优化的问题,中文叫个同事帮我看看汇编码看,偶汇编菜啊= =!
dazhuaye 2007-05-31
  • 打赏
  • 举报
回复
学习!~
  • 打赏
  • 举报
回复
是啊,打开优化开关
taodm 2007-05-31
  • 打赏
  • 举报
回复
你编译选项打到最优化没有?
星羽 2007-05-30
  • 打赏
  • 举报
回复
有人看汇编看看有什么不同吗,偶也想知道
hslinux 2007-05-30
  • 打赏
  • 举报
回复
声明为inline,只是告诉编译器:这个函数我想在编译的时候展开,,至于编译器展不展开就不是我们能控制的了,跟编译器有关,一般语句少才会展开.
jorneyR 2007-05-30
  • 打赏
  • 举报
回复
inline函数只是在调用函数的地方把这个函数的代码复制到那里展开来代替函数调用,一般是用得比较多,比较短小的函数才使用inline来声明。

但现在的很多编译器对于短小且使用频度较多的函数都会自动的让其在编译时转换成inline函数,所以明确的声明一个函数为inline函数,并不一定能看到程序的性能会有多大的提高,这还与编译器有关。
coolnick 2007-05-30
  • 打赏
  • 举报
回复
mark
星羽 2007-05-30
  • 打赏
  • 举报
回复
是不是debug 的问题

64,649

社区成员

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

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