代码片段的页面错误

nig*_*der 4 c++ operating-system

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

此代码片段计算每个表列的平均值 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;
}
Run Code Online (Sandbox Code Playgroud)

变量是32位浮点值.

变量i,j,temp被存储在处理器寄存器(因此没有必要的存储器参考访问临时.主存储器是可寻址的字和寻呼包含17帧,每帧的大小为1024个字和一个字为4个字节.页面替换策略是LRU.

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

如何计算?

and*_*dre 5

int array[3][3] = {{0, 1, 2},
                  {3, 4, 5},
                  {6, 7, 8}};
Run Code Online (Sandbox Code Playgroud)

这个数组在内存中的布局就是[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]
Run Code Online (Sandbox Code Playgroud)

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

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