问题 单项选择题

有一矩阵“int a[50][50]”以行为序进行存储,有一个虚拟存储系统,物理内存共有 3页,其中1页用来存放程序,其余2页用于存放数据。假设程序已在内存中占1页,其余 2页空闲。

程序A:

for(i=0; i<=49;i++)

for(j=0; j<=49;j++)

A[i][j]=0;

程序B:

for(i=0; i<=49; i++)

for(j=0; j<=49; j++)

A[i][j]=0;

若每页可存放50个整数,执行程序A会发生 (52) 次缺页,执行程序B会发生 (53) 次缺页。

(53)处填()。

A.50

B.500

C.2000

D.2500

答案

参考答案:D

解析:

由题目中所给条件可知,数组A有50×50个整数,系统中共有2个内存页用于存放数据,信息数组中的元素按行编址。

若每页可以存放50个整数,则一个内存页中可以存放1行数组元素,对于程序A,数组元素的访问顺序为:

A[0][0],A[0][1]…A[0][49]

A[1][0],A[1][1]…A[1][49]

A[49][0],A[49][1]…A[49][49]

显然,程序A对数据A的访问顺序与存储顺序一致,也是按行进行的。因此程序A每访问1行数据元素都会产生一次缺页中断,则访问整个数据会产生50次缺页中断。

对于程序B,数组元素的访问顺序为:

A[0][0],A[1][0]…A[49][0]

A[0][1],A[1][1]…A[49][1]

A[0][49],A[1][49]…A[49][49]

显然,程序B对数据A的访问顺序与存储顺序不一致,因此程序B每访问1个数据元素都会产生一次缺页中断,则访问整个数据会产生2500次缺页中断。

经过上述分析,不得不引人深思,平时写程序的过程中,一个很细微的改变,可能导致计算机工作量数十倍的增长。

问答题
多项选择题