代码片段的页面错误

Page Fault For a Code Fragment

本文关键字:错误 片段 代码      更新时间:2023-10-16

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

此代码片段计算每个表列的平均值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 位浮点值。

变量ijtemp存储在处理器寄存器中(因此无需内存参考来访问温度。 主存储器是可寻址的,分页包含 17 帧,每个帧的大小为 1024 个字,一个字为 4 个字节。页面替换策略为 LRU。

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

如何计算?

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)。