나는이 프로그램에서 1000 개 이상의 페이지 폴트를 제거하고있다. 좀 더 작은 값이나 0으로 줄일 수 있습니까? 또는 다른 변경은 실행이 프로그램의 페이지 오류를 줄이는 방법은 무엇입니까?
#include <stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
register unsigned int u, v,i;
register unsigned int arr_size=0;
register unsigned int b_size=0;
register unsigned int c;
register unsigned int *b;
FILE *file;
register unsigned int *arr;
file=fopen(argv[1],"r");
arr=(unsigned int *)malloc(4*10000000);
while(!feof(file)){
++arr_size;
fscanf(file,"%u\n",&arr[arr_size-1]);
}
fclose(file);
b=(unsigned int *)malloc(arr_size*4);
if (arr_size!=0)
{
++b_size;
b[b_size-1]=0;
for (i = 1; i < arr_size; ++i)
{
if (arr[b[b_size-1]] < arr[i])
{
++b_size;
b[b_size-1]=i;
continue;
}
for (u = 0, v = b_size-1; u < v;)
{
c = (u + v)/2;
if (arr[b[c]] < arr[i]) u=c+1; else v=c;
}
if (arr[i] < arr[b[u]])
{
b[u] = i;
}
if(i>arr_size)break;
}
}
free(arr);
free(b);
printf("%u\n", b_size);
return 0;
}
프로그램을 개선하기 위해 할 수있는 첫 번째 일은 적절한 들여 쓰기입니다. 잠깐, 내가 편집 해 줄게. – schnaader
감사합니다. schnaader –
많은 메모리를 사용하기 때문에 많은 페이지 오류가 발생합니다. 이것이 운영 체제가 작동하는 방식으로, 가상 메모리를 실제 메모리로 전환시킵니다. –