操作系统实验里,通过遍历二维数组查看行列遍历与列行遍历的效率差异与页中断次数差异。却发现虽然两种遍历的虽然花费的时间差距很大但是中断次数却几乎一致。找不到原因特来题问。
行列遍历
#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<sys/time.h>
#include<sys/resource.h>
#define MAX_ROW 10240
#define MAX_COL 20480
int a[MAX_ROW][MAX_COL];
int main() {
struct timeval t1, t2;
long delt;
printf("row:%lld col:%lld\n", MAX_ROW, MAX_COL);
gettimeofday(&t1, NULL);
for (int i = 0; i < MAX_ROW; i++) {
for (int j = 0; j < MAX_COL; j++) {
a[i][j] = 1;
}
}
gettimeofday(&t2, NULL);
delt = (t2.tv_sec - t1.tv_sec) * 1e6 + t2.tv_usec - t1.tv_usec ;
printf("i:ROW, j:COL : %lldus\n", delt);
sleep(10);
return 0;
}
列行遍历
#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<sys/time.h>
#include<sys/resource.h>
#define MAX_ROW 10240
#define MAX_COL 20480
int a[MAX_ROW][MAX_COL];
int main() {
struct timeval t1, t2;
long delt;
printf("row:%lld col:%lld\n", MAX_ROW, MAX_COL);
gettimeofday(&t1, NULL);
for (int i = 0; i < MAX_COL; i++) {
for (int j = 0; j < MAX_ROW; j++) {
a[j][i] = 1;
}
}
gettimeofday(&t2, NULL);
delt = (t2.tv_sec - t1.tv_sec) * 1e6 + t2.tv_usec - t1.tv_usec ;
printf("i:COL, j:ROW : %lldus\n", delt);
sleep(10);
return 0;
}
网上查到的查询页面中断的方法是ps -o majflt,minflt -C 程序名