散分给大家拜晚年。问题超级简单,快来快来~~~

FreeSeagull 2005-02-18 01:17:54
使用如下程序测试对数组元素的访问速度:

#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
unsigned long t1,t2,t3;
int a[65536]={0},l,k = 0;

do{
t1 = GetTickCount();

for(int i = 0 ; i < 65535; i ++)
for(int j = 0 ; j < 65535 ; j ++)
l = a[1];
t2 = GetTickCount();

for(i = 0 ; i < 65535; i ++)
for(int j = 0 ; j < 65535 ; j ++)
l = a[65535];
t3 = GetTickCount();

printf("Access a[1] time = %ld\n",t2-t1);
printf("Access a[65535] time = %ld\n\n",t3-t2);
}while(++k < 100);

return 0;
}

在VC++ 6上的结果是:访问a[1]比访问a[65535]的速度快3-4倍。在VC++.NET上对两者的访问速度没有明显差别。那么,为什么会这样呢?为什么访问速度会有差异? 在VC++ 6调试模式下打开反汇编窗口, 看到l = a[1]和l=a[65535]的代码差不多,都是:
mov edx,dword ptr [ebp-xxxxh] // 两者仅仅是这里的xxxx不同
mov dword ptr [ebp-40010h],edx

奇怪!
...全文
304 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
phineco 2005-02-28
  • 打赏
  • 举报
回复
我的机器上为什么运行不起来,只要运行CPU就占用100%,且没有结果输出??
mousefj 2005-02-28
  • 打赏
  • 举报
回复
我想是内存分配的原因导致寻址过程不一致。
FreeSeagull 2005-02-28
  • 打赏
  • 举报
回复
U.P
FreeSeagull 2005-02-23
  • 打赏
  • 举报
回复
UP
wenddy112 2005-02-23
  • 打赏
  • 举报
回复
页面访问失效造成多余的io时间。
sjh311 2005-02-23
  • 打赏
  • 举报
回复
UP+学习
FreeSeagull 2005-02-21
  • 打赏
  • 举报
回复
?
janwang2000 2005-02-20
  • 打赏
  • 举报
回复
up
light_sun 2005-02-19
  • 打赏
  • 举报
回复
up. bu dong
DragonBill 2005-02-19
  • 打赏
  • 举报
回复
a[65536]改成a[65535]之後:

Access a[1] time = 10000
Access a[65535] time = 10562

之前:

Access a[1] time = 9688
Access a[65535] time = 10500

應該和內存分配有關吧,不是太了解,關注

我的機器 CPU 2.8G RAM 512
FreeSeagull 2005-02-19
  • 打赏
  • 举报
回复
现在更奇怪了,在我同事的机器(PIII 733 1G RAM)上,把数组改小一些,比如,65530,两者运行的时间就基本差不多一样了。在我的机器上,两者仍然差很多。
legendhui 2005-02-19
  • 打赏
  • 举报
回复
up
ncucf 2005-02-19
  • 打赏
  • 举报
回复
我想是内存开辟的原因吧,vc6可能是一部分一部分的开辟,依次提交那些地址,所以访问a[65535]要更慢些——因为访问它,要等到它的内存地址被提交!

而vc7可能就是同时提交那么大的内存快,所以就不会有速度的差异了!

这个并不是“你数到1 和数到65535哪个需要时间多些?”——因为如果同时都提交到内存了的话,a[1]和a[65535]的寻址,并不会有什么很大区别的,毕竟cpu寻址a[65535]并不是挨个搜寻过去,而是直接跳到a[65535]地址上的!


pcyy 2005-02-19
  • 打赏
  • 举报
回复
没研究过。 :(
学习.......
FreeSeagull 2005-02-19
  • 打赏
  • 举报
回复
谁知道?
wangxp_bbi 2005-02-19
  • 打赏
  • 举报
回复
studying
weiym 2005-02-19
  • 打赏
  • 举报
回复
学习
FreeSeagull 2005-02-19
  • 打赏
  • 举报
回复
?
FOX7899 2005-02-19
  • 打赏
  • 举报
回复
以前我看过类似的例子,不过忘了,去年六七月份有过,可以查一下。
bits04 2005-02-19
  • 打赏
  • 举报
回复
up
加载更多回复(9)

16,472

社区成员

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

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

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