标题:[原创]二维数组与缺页中断率
只看楼主
lanxindaocao
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-9-11
 问题点数:0 回复次数:20 
[原创]二维数组与缺页中断率
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 [url=http://www.]http://www.[/url]
*/ 作者: 蓝心稻草 E-mail:[email=out_of_blue@]out_of_blue@[/email] QQ:360852129
*/ 时间: 2007-11-30  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

     我们知道二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组,有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。
    在C语言中,二维数组是按行排列的。
    这就带来了一个问题。下面的两个程序段:
            /*程序段一,以下称A*/
               for(i=0;i<n;++i)
                    for(j=0;j<n;++j)
                         a[i][j]=k;
            /*程序段二,以下称B*/
               for(j=0;j<n;++j)
                    for(i=0;i<n;++i)
                         a[i][j]=k;
                          (k是已知常数)
    分别会给页面调度带来什么影响呢?我们取n为64,并实现把数组置零(即k=0)为方便说明,我们假定分给这个程序的主存块数只有一块,页面的尺寸为每页64个字,数组中的元素每一行存放在一页中,开始时第一页在主存。那么,显然采用A的编程方式将会产生(64-1)次缺页中断,而采用B由于没执行一次a[i][j]=k都会造成一次缺页中断,共计(64×64-1)次。很明显,随着n值的增大这两个数的差值是惊人的。
    现以a[3][3]为例,由于c语言二维数组是按行排列的,若采用A,当执行赋值完a[0][2]时产生中断,到a[1][2]时又一次中断。而采用B的话,由于每次i值的改变引起的并不是存储器的连续地址变换,每执行赋值就会产生一次缺页中断,而与页面调度的算法是无关的。
    说了这么多,其实这种小程序是否有机会去影响页面调度都是很难说的。主要是想说明,能用A的时候大家不要用B的方法。当然也很少有人无聊的用B。(我在这白废话了~~)   
   
    小弟初学c,很多不对的地方高人指教,但请不要骂我!!因为我发现坛里好多高手并不能很谦虚的给我们指教,总爱摆份架子~你们也是从菜鸟起步的呐~谢了^_^

[[italic] 本帖最后由 lanxindaocao 于 2007-11-30 15:16 编辑 [/italic]]
搜索更多相关主题的帖子: 编程论坛 存储器 中国 
2007-11-30 14:55
kidd2005
Rank: 1
等 级:新手上路
帖 子:193
专家分:0
注 册:2007-11-2
得分:0 
原来两种写法的区别在于中断啊~我还以为是一样的呢~

潜心苦C,却发觉百C不得其解啊~
2007-11-30 15:27
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
得分:0 
操作系统
2007-11-30 15:33
lanxindaocao
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-9-11
得分:0 
回复 2# 的帖子
应该不只这些吧~我也不清楚呐~
2007-11-30 15:39
kidd2005
Rank: 1
等 级:新手上路
帖 子:193
专家分:0
注 册:2007-11-2
得分:0 
运行的结果会不会在某些特定情况下会有不同呢??如果有的话,请知道的写出来并说明为什么啦

潜心苦C,却发觉百C不得其解啊~
2007-11-30 15:54
lanxindaocao
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-9-11
得分:0 
回复 5# 的帖子
这个只是理论上说说,很难让这么个程序占用虚拟内存呐~~~
2007-11-30 16:08
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
我在VC下试了一下,B比A的时间要多出50%

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-30 16:09
lanxindaocao
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-9-11
得分:0 
回复 7# 的帖子
这么可观? 我没试过呐
2007-11-30 16:11
维c
Rank: 1
等 级:新手上路
帖 子:202
专家分:0
注 册:2007-8-13
得分:0 
好强..
速度还真差很多

花开花落
不愁不惑
http://hi.baidu.com/vitaminic
2007-11-30 18:48
满江风
Rank: 1
等 级:新手上路
帖 子:102
专家分:0
注 册:2007-10-30
得分:0 
支持lz
2007-11-30 19:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-189536-1-1.html




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

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