/* * Duas abordagens para preencher um segmento de dados. */ #include #include #include #include #include #define PAGESIZE 4096 #define N 100000 char mat[N][PAGESIZE]; void preenche_rapido(char c) { int i, j; printf("Inicio preenche rápido.\n"); for (i = 0; i < N; i++) for (j = 0; j < PAGESIZE; j++) mat[i][j] = c; printf("Fim preenche rápido.\n"); } void preenche_lento(char c) { int i,j; printf("Inicio preenche lento.\n"); for (j = 0; j < PAGESIZE; j++) for (i = 0; i < N; i++) mat[i][j] = c; printf("Fim preenche lento.\n"); } int main() { struct rusage uso0, uso1, uso2; char *topo = sbrk(0); printf("Topo da área de dados = %p\n", topo); getrusage(RUSAGE_SELF, &uso0); preenche_rapido('*'); getrusage(RUSAGE_SELF, &uso1); preenche_lento('-'); getrusage(RUSAGE_SELF, &uso2); if (uso2.ru_majflt > 0) printf("Falhas de página com ida ao disco: %d", uso2.ru_majflt); return 0; }