Как уменьшить количество ошибок на странице в этой программе? - PullRequest
1 голос
/ 19 августа 2011

В этой программе я собираю более 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 голосов
/ 19 августа 2011

Линия:

arr = (без знака int *) malloc (4 * 10000000);

не очень хороший стиль программирования. Вы уверены, что ваш файл размером 40 МБ? старайтесь не выделять всю память в первых строках вашей программы.

...