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はプロセッサレジスタjtemp格納されます(したがって、温度にアクセスするためのメモリ参照は必要ありません。メインメモリはワードアドレス可能で、17フレームを含むページングされ、各サイズは1024ワード、1ワードは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 に答える