关于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编译或者配置的不对?请大家指点。
...全文
310 13 打赏 收藏 转发到动态 举报
写回复
用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直接优化掉了。
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完整的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完整科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

65,211

社区成员

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

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