Linux二维数组遍历缺页中断次数问题

问题遇到的现象

操作系统实验里,通过遍历二维数组查看行列遍历与列行遍历的效率差异与页中断次数差异。却发现虽然两种遍历的虽然花费的时间差距很大但是中断次数却几乎一致。找不到原因特来题问。

问题相关代码

行列遍历

#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;
}
运行结果及报错内容

img

img

我的解答思路和尝试过的方法

网上查到的查询页面中断的方法是ps -o majflt,minflt -C 程序名