关于boost::timer组件小问题

GARY 2011-06-28 06:19:43

#include <iostream>
#include <boost/timer.hpp>
using namespace std;

int main()
{
boost::timer t;
for (long i = 100000; i > 0; --i)
for (long j = 100000; j > 0; --j);
cout << "now time elapsed: " << t.elapsed() << "s" << endl;
system("PAUSE");
}

这么一段测试代码,输出时间“流逝”。
Debug下输出结果:

Release下输出结果:

这是为什么呢?是我的boost编译或者配置的不对?请大家指点。
...全文
233 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yfk 2011-07-01
  • 打赏
  • 举报
回复
for循环的优化
这个问题出现多次了
lucky-lucky 2011-06-30
  • 打赏
  • 举报
回复
编译器好厉害
wgm001 2011-06-30
  • 打赏
  • 举报
回复
精度太低,应该是windows上吧……
GARY 2011-06-29
  • 打赏
  • 举报
回复

#include <iostream>
#include <boost/timer.hpp>
using namespace std;

int main()
{
boost::timer t;
size_t count = 0;
srand(time(NULL));
for (long i = 10000; i > 0; --i)
{
for (long j = 10000; j > 0; --j)
{
count += rand();
}
}
cout << "now time elapsed: " << t.elapsed() << "s" << endl;
cout << count << endl;
system("PAUSE");
}

改成这样之后,还是会被优化,Release输出还是0。
然后又关闭优化选项之后可以了。时间是1s多。
GARY 2011-06-29
  • 打赏
  • 举报
回复
哦。原来是编译器优化的原因啊。多谢。
healer_kx 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ma100 的回复:]

引用 5 楼 loaden 的回复:
其中,只要在循环中递增一个变量,然后循环外再输出一次。
编译器是不可能优化的。

C/C++ code
size_t count = 0;
for (long i = 100000; i > 0; --i)
for (long j = 100000; j > 0; --j)
++count;

cout << cout << endl;
……
[/Quote]

真的很高级啊!
「已注销」 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ma100 的回复:]

引用 5 楼 loaden 的回复:
其中,只要在循环中递增一个变量,然后循环外再输出一次。
编译器是不可能优化的。

C/C++ code
size_t count = 0;
for (long i = 100000; i > 0; --i)
for (long j = 100000; j > 0; --j)
++count;

cout << cout << endl;
……
[/Quote]
那,那就: srand(time(NULL));后,count += rand();好了。
ma100 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 loaden 的回复:]
其中,只要在循环中递增一个变量,然后循环外再输出一次。
编译器是不可能优化的。

C/C++ code
size_t count = 0;
for (long i = 100000; i > 0; --i)
for (long j = 100000; j > 0; --j)
++count;

cout << cout << endl;
……
[/Quote]


是可以优化的, 你可以试一下gcc4.4 -O2
「已注销」 2011-06-28
  • 打赏
  • 举报
回复
其中,只要在循环中递增一个变量,然后循环外再输出一次。
编译器是不可能优化的。

size_t count = 0;
for (long i = 100000; i > 0; --i)
for (long j = 100000; j > 0; --j)
++count;

cout << cout << endl;


则不可能把循环优化掉,否则编译器就可以扔掉了。
ma100 2011-06-28
  • 打赏
  • 举报
回复
里面写点简单的,比如n++也会被优化(linux -O2)
而且貌似在linux下在for里cout一个字符串,虽然没优化,但返回值也是0
而且linux下, 写sleep(1)也是0, getchar也是0,windows下不是, 原因是他吧cpu空闲时间没计入

所以这个东西其实不跨平台
icelemon1314 2011-06-28
  • 打赏
  • 举报
回复
这也会被优化掉.....

看来以后得注意点了~~~
「已注销」 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]

不,是Release优化的结果,

你的两层for什么都没干啊,于是,Release直接优化掉了。
[/Quote]
在for循环里干点啥。
或者关闭优化选项。
另一个原因是:timer的精度不够,导致计时为零。
healer_kx 2011-06-28
  • 打赏
  • 举报
回复
不,是Release优化的结果,

你的两层for什么都没干啊,于是,Release直接优化掉了。

65,186

社区成员

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

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