| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2406 人关注过本帖
标题:【有代码有真相】昨天无聊 来了个测试 测试出了一个不好解释的现象 同样代码 ...
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <time.h>
int main(void)
{
    int i = 0;
    double j = 0;
    clock_t t1 = clock();
    while (i++ < 1<<30)
    {
        j--;
    }
    printf("用时%f s\n", (double)(clock() - t1) / CLOCKS_PER_SEC);
    printf("结果%d\n", (int)(i + j));
    return 0;
}



不优化 看单纯跑循环效率有无差别
2013-04-20 09:55
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[root@kel tmp]# time ./loops.out
用时4.850000 s
结果1
real    0m4.857s
user    0m4.853s
sys    0m0.000s
[root@kel tmp]# time nice -n -20 ./loops.out
用时4.850000 s
结果1
real    0m4.862s
user    0m4.857s
sys    0m0.007s
2013-04-20 10:01
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
time ./a.exe
用时4.875000 s
结果1

real    0m4.968s
user    0m0.015s
sys     0m0.015s

windows下结果是这个 看来跑这种东西区别不大
2013-04-20 10:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:17 
学习接分

授人以渔,不授人以鱼。
2013-04-20 11:22
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
不能光接分啊,test给答案啊.

我们都在路上。。。。。
2013-04-20 11:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2013-04-20 11:59
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
我倒...............多半Z版用的是低档的C工程.

我们都在路上。。。。。
2013-04-20 12:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实这种测试没什么意义的。那篇博文说环境是VS2008和.NET3.5,就算不迁移,光是测试密集计算,.NET的运行机制把DLL代码加载到内存就跟原先的非托管代码差不多,无非是多了一点加载时编译时间罢了,然而JIT在程序第二次运行时发现代码已编译过(内存中仍未卸载)就会跳过编译步骤,时间又不同,再者JIT是根据安装在不同机器和环境上的具体软硬件配置动态优化运行的,跟非托管代码静态优化的机制不同,这些都注定测试没有可比性。

授人以渔,不授人以鱼。
2013-04-20 12:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用hellovfp在2013-4-20 12:10:48的发言:

我倒...............多半Z版用的是低档的C工程.
就一个源码 我直接用gcc编译的 工程是作者提供的 我没动
2013-04-20 12:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2013-4-20 12:18:01的发言:

其实这种测试没什么意义的。那篇博文说环境是VS2008和.NET3.5,就算不迁移,光是测试密集计算,.NET的运行机制把DLL代码加载到内存就跟原先的非托管代码差不多,无非是多了一点加载时编译时间罢了,然而JIT在程序第二次运行时发现代码已编译过(内存中仍未卸载)就会跳过编译步骤,时间又不同,再者JIT是根据安装在不同机器和环境上的具体软硬件配置动态优化运行的,跟非托管代码静态优化的机制不同,这些都注定测试没有可比性。

.net神马的我不知道 我就想知道这里时间不同的原因是啥 能否解释 可否重现
2013-04-20 12:33
快速回复:【有代码有真相】昨天无聊 来了个测试 测试出了一个不好解释的现象 同 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067040 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved