4

这不是一个家庭作业问题。它出现在我今天的学期考试中。

此代码片段计算每个表列的平均值t[i][j] 0<=i<18 ; 0<=j<1024

for (j = 0; j < 1024; i++) {  
   temp = 0;  
   for (i = 0; i < 18; i++) {  
      temp += temp + t[i][j];  
   }  
   cout << temp/18;
}

变量是 32 位浮点值。

变量i, j,temp存储在处理器寄存器中(因此不需要内存引用来访问 temp。主内存是字可寻址的,分页包含 17 个帧,每个大小为 1024 个字,一个字为 4 个字节。页面替换策略是 LRU。

确定执行给定程序片段的页面错误数?答:18432

如何计算它?

4

1 回答 1

5
int array[3][3] = {{0, 1, 2},
                  {3, 4, 5},
                  {6, 7, 8}};

这个数组在内存中的布局[0, 1, 2, 3, 4, 5, 6, 7, 8]

array[0][0]
array[0][1]
array[0][2]
array[1][0]
array[1][1]
array[1][2]
array[2][0]
array[2][1]
array[2][2]

array[1][0]这里和之间的内存地址差array[2][0]为3;

所以给定一个数组a[18][1024]a[i][j]和之间的差异a[i+1][j]是 1024 字节(页面错误的大小)。因此,每次您的内部循环触发都会导致页面错误。您的内部循环触发 18*1024 次(18432)。

于 2012-11-19T15:41:59.803 回答