如何减少此程序中的页面错误?

时间:2011-08-19 18:46:44

标签: performance execution faults

我在这个程序中控制了超过1000页的错误。 我可以将它们减少到更小的值甚至是零吗? 甚至任何其他变化都可以加快执行速度

#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;
}

1 个答案:

答案 0 :(得分:0)

该行:

arr =(unsigned int *)malloc(4 * 10000000);

不是一个好的编程风格。你确定你的文件大到40MB吗?尽量不要在程序的第一行分配整个内存。