免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4091 | 回复: 15
打印 上一主题 下一主题

大家看看为什么下面这两条语句的执行时间相差这么多? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-26 13:12 |只看该作者 |倒序浏览
g_stTPM[TpmNum].Test++;
g_stTPM[TpmNum].Capture[ChalNum].CapNum++;

经过测试第二个语句的执行时间是第一个语句执行时间的5倍。
为什么?谁出来解释一下?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2012-04-26 13:18 |只看该作者
第二条做的事情多呀,不具可比性

论坛徽章:
0
3 [报告]
发表于 2012-04-26 13:52 |只看该作者
cache miss?

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
4 [报告]
发表于 2012-04-26 14:07 |只看该作者
怎么测试的?这个也有疑问!

论坛徽章:
0
5 [报告]
发表于 2012-04-26 15:13 |只看该作者
不都是只是做了一个自增的工作吗?只是发生这个自增动作的变量不同了。回复 2# hellioncu


   

论坛徽章:
0
6 [报告]
发表于 2012-04-26 15:14 |只看该作者
语句运行前记下时间,运行后再记下时间,二者进行相减,就是这条语句的执行时间。回复 4# asuka2001


   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
7 [报告]
发表于 2012-04-26 15:45 |只看该作者
回复 6# teclimber

我的意思是指的,比如你测试了第一条语句的执行时间,有可能CPU内缓存了某些数据。这会影响第二条语句的执行时间!

也就是说你的测试是不是对两条语句是完全公平的!

还有你记录语句的执行时间,其精度能满足测试要求吗?


   

论坛徽章:
0
8 [报告]
发表于 2012-04-26 16:15 |只看该作者
这个问题你放心完全没有问题,测试一条都是采用测量多次,经过观察多次 的测量数据完全一样,非常准确。而且每条语句编译为二进制代码后的执行时间就固定了,不会乱变的。时间的准确度也是完全没有问题的。问题就是为什么会是这种现象?自己不太明白,希望明白的人解答一下疑问!回复 7# asuka2001


   

论坛徽章:
0
9 [报告]
发表于 2012-04-26 17:44 |只看该作者
”c++在做自增操作的时候先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于int型对象和指针,编译器可以优化这工作。但是对于更多的复杂迭代器类型,这种额外的工作可能会花费更大的代价“,来自《c++ primer》也就是说后一句肯定比前一句要的时间多,但是5倍的时间这个具体数字就不好说了

论坛徽章:
0
10 [报告]
发表于 2012-04-26 17:50 |只看该作者
估计你的那些个结构是stl的某个容器,要是普通的结构体,那肯定就一样了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP