VS2005 VS2015编译出程序执行速度的问题?

baidu_35588641 2016-07-12 11:03:45
程序如下
DWORD begintick;
DWORD len;
begintick=::GetTickCount();
char *p;
for(i=0;i<40000000;i++)
{int ik;
p=new char [2000];
for(ik=0;ik<2000;ik++)
p[ik]=ik;
delete p;
}

len=::GetTickCount()-begintick;
printf(" the len=%d",len);


使用64位程序 RELEASE(没试32位的) 在同一台机上运行,结果两个之间的速度差别在10%以上,以前没有想到会有这样的差别,还是其它什么什么问题,关于编译设置我大概检查了一下,没有问题。
...全文
515 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_35588641 2016-07-30
  • 打赏
  • 举报
回复
所以,还是尽量用最新的编译器吧
baidu_35588641 2016-07-30
  • 打赏
  • 举报
回复
我检查了一下发现两者的编译器还是有一定性能上差别的,去NEW DELETE 操作 程序如下: DWORD i; DWORD begintick; DWORD len; char *p; p = new char[2000];begintick = ::GetTickCount(); for (i = 0; i<40000000; i++) { int ik; for (ik = 0; ik<2000; ik++) { p[ik] = ik; } } len = ::GetTickCount() - begintick; delete p; printf(" the len=%d", len); VS2015 编译如下 for (ik = 0; ik<2000; ik++) 000000013FE11040 xor ecx,ecx 000000013FE11042 mov rdx,rbx 000000013FE11045 nop word ptr [rax+rax] { p[ik] = ik; 000000013FE11050 mov byte ptr [rdx],cl 000000013FE11052 lea rdx,[rdx+1] 000000013FE11056 inc ecx 000000013FE11058 cmp ecx,7D0h 000000013FE1105E jl main+50h (013FE11050h) for (i = 0; i<40000000; i++) 000000013FE11060 sub r8,1 000000013FE11064 jne main+40h (013FE11040h) } VS2005 编译如下 for (ik = 0; ik<2000; ik++) 0000000000401030 xor ecx,ecx 0000000000401032 mov rdx,rbx 0000000000401035 xchg ax,ax 0000000000401039 xchg ax,ax 000000000040103C xchg ax,ax { p[ik] = ik; 0000000000401040 mov byte ptr [rdx],cl 0000000000401042 add ecx,1 0000000000401045 add rdx,1 0000000000401049 cmp ecx,7D0h 000000000040104F jl wmain+40h (401040h) for (i = 0; i<40000000; i++) 0000000000401051 sub r8,1 0000000000401055 jne wmain+30h (401030h) } 两者执行速度差别在10%。 更为想不到的是如果改p[ik] = ik;为p[ik] =8时 VS2015 执行显示为0,反汇编了一下,没有相应代码,也就是此时编译器已经知道了此代码为无效代码。 但VS2005没有此优化的结果。
赵4老师 2016-07-27
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
qinlj0 2016-07-24
  • 打赏
  • 举报
回复
Win7其实为回教异化的XP。VC8为荷兰版,虽然前一阵荷兰比较混乱,但荷兰还是盟军的一员。 了解了这个,为什么Win7上VC8编译的程序速度慢原因就简单了。
baidu_35588641 2016-07-19
  • 打赏
  • 举报
回复
查出来了,可能是NEW DELETE 的效率问题。VS2005的 NEW 执行要慢。
用户 昵称 2016-07-15
  • 打赏
  • 举报
回复
涉及new的,就跟系统的库有关了,如果比较优化效果,看汇编代码就行。
baidu_35588641 2016-07-15
  • 打赏
  • 举报
回复
delete []p; delete p;效果是一样的,p 指的不是对象。 我注意的问题的两个编译器的优化效果问题。
用户 昵称 2016-07-15
  • 打赏
  • 举报
回复
delete []p; 这样才更好。
baidu_35588641 2016-07-15
  • 打赏
  • 举报
回复
反汇编了一下 发现一个用INC 一个用 ADD 1 指令不知是不是这个原因, 以后测试了一下, 将p[ik]=ik;改成p[ik]=8;后速度又基本上一致了。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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