首页 > 试题广场 >

比较两个方法t1和t2的运行速度,你认为正确的描述是?

[单选题]
比较两个方法t1和t2的运行速度,你认为正确的描述是
#define A_NUM 10000000
#define B_NUM 1000
void t1 ( ) {
    int i, j;
    for ( i = 0; i < A_NUM; i ++ ) { 
        for ( j = 0; j < B_NUM; j ++ ) { 
            b[ j ] ++; 
        } 
    } 
} 
void t2 ( ) { 
    int i, j; 
    for ( j = 0; j < B_NUM; j ++ ) { 
        for ( i = 0; i < A_NUM; i ++ ) { 
            a[ i ] ++; 
        } 
    } 
}

  • tl运行速度快
  • t2运行速度快
  • 无根本差别,一样快
  • 无法判断
推荐
Ian头像 Ian
应该选A。进行数组访问时,操作系统需要将相关内存页面载入***中,一个页面的大小是有限的,如果程序需要访问页面外的内存数据,操作系统需要进行换页操作,这个操作是耗时的。t1访问的内存区域大小为1000,系统不需要或极少需要换页。t2需要访问的内存区域大小为1000000,系统需要多次换页,比较耗时。简单的讲,t1具有较好的程序局部性。这题需要具备一些操作系统或微机原理的知识。
编辑于 2015-02-10 15:32:59 回复(4)
python程序测试,第一种快
发表于 2015-09-11 14:21:31 回复(0)
应该选A。进行数组访问时,操作系统需要将相关内存页面载入***中,一个页面的大小是有限的,如果程序需要访问页面外的内存数据,操作系统需要进行换页操作,这个操作是耗时的。t1访问的内存区域大小为1000,系统不需要或极少需要换页。t2需要访问的内存区域大小为1000000,系统需要多次换页,比较耗时。简单的讲,t1具有较好的程序局部性。这题需要具备一些操作系统或微机原理的知识。
发表于 2017-04-15 12:13:25 回复(1)

应该选择B啊,这个里面讲的很清楚呢,把循环次数多的放在内层,可以减少内层和外层之间的切换次数 http://blog.csdn.net/lengxiao_wang/article/details/636895

发表于 2015-08-14 09:36:21 回复(7)
经Java实测,test1速度为1000+ ms,test2速度为8000+ ms,明显第一个快,答案没有错。这篇博客 http://blog.csdn.net/lengxiao_wang/article/details/636895 讲的也没错,只是这道题的两个不同循环所做的具体内容并不完全相同,所以导致结果不同。
发表于 2016-06-27 21:53:46 回复(3)
这种题目,从***大小来分析,选A。因为***调入次数少;从局部性原理和缺页率来分析,选B。因为B的缺页率更小。也是醉了,到底选啥!
发表于 2017-03-03 16:50:04 回复(2)
有没有准确答案呢?迷糊了
发表于 2015-10-03 17:54:24 回复(0)
推荐答案解释得很好了,也基本上是本题要考察的点。但是题目本身出的不严谨,应该告知程序运行的环境,不是所有代码需要操作系统才能运行的,如果没有操作系统就不存在什么缺页调度。当然有的处理器内部也有多级缓存,而且相同架构的处理器各家的缓存机制也不一样,所以运行时间还真不好说。另外,写代码在机器上实测的意义不大,分时操作系统没啥好测的。
发表于 2016-07-30 17:09:25 回复(0)
方法1数组更小,查找速度快
发表于 2023-04-13 10:58:23 回复(0)
实际上的编程,i和j都是有实际意义的,怎么容易理解怎么来;
特别大的数据通过for循环访问,比如1000000,我没有遇到过
发表于 2021-12-24 21:41:58 回复(0)
程序运行时,操作系统会将相关内存页面载入***中。t1访问的内存区域大小为1000,所对应的内存页面可全部加载到***中,程序所需要的数据都在***中,那么程序运行的时候就极少需要进行换页操作。换页操作是一个非常耗时的操作。
发表于 2019-08-01 12:56:53 回复(0)
1mb还能失页牛逼
发表于 2018-01-08 22:16:41 回复(0)
用VS2013,分别在debug和release环境下运行,得到的结果表明:t1的比t2的要快
发表于 2017-09-03 15:23:02 回复(0)
之前做过这样类似的题目,是将大循环放在里面比较快,这样可以减少内外层切换次数
现在看了他们的解释都不知道什么是对的了   是因为里面循环的是数组的原因?
编辑于 2017-06-05 09:18:30 回复(0)
C++ 测试第二个快
发表于 2015-09-29 10:50:15 回复(0)