2011-08-19 4 views
1

나는이 프로그램에서 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; 
} 
+2

프로그램을 개선하기 위해 할 수있는 첫 번째 일은 적절한 들여 쓰기입니다. 잠깐, 내가 편집 해 줄게. – schnaader

+0

감사합니다. schnaader –

+1

많은 메모리를 사용하기 때문에 많은 페이지 오류가 발생합니다. 이것이 운영 체제가 작동하는 방식으로, 가상 메모리를 실제 메모리로 전환시킵니다. –

답변

0

속도를 줄 수있다 :

도착 = (부호 INT *)의 malloc (4 * 10000000);

은 (는) 프로그래밍 스타일이 좋지 않습니다. 파일 크기가 40MB로 큰가요? 프로그램의 첫 번째 줄에 전체 메모리를 할당하지 마십시오.

+0

나는 realloc()을 사용하려고했지만 프로그램을 느리게 만들려고했다. 내가 만들었지 만, 내 파일이 15MB가 될지도 모르니 고맙다. 그래서 4 * 3750000으로 바꿨다. –

관련 문제