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

Posted

技术标签:

【中文标题】如何减少该程序中的页面错误?【英文标题】:how to reduce page faults in this program? 【发布时间】:2011-08-19 18:46:44 【问题描述】:

我在这个程序中控制了超过 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】:

行:

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

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

【讨论】:

我尝试使用 realloc() 但它减慢了程序的速度。我做了,但谢谢我的文件可能需要 15MB,所以我将其更改为 4*3750000

以上是关于如何减少该程序中的页面错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何减少/消除 Angular 应用程序中的内存泄漏

使用 Object.freeze 和 object.unfreeze 来减少具有大量表数据行的响应式页面中的内存膨胀

如何减少程序的CPU使用率?

如何在编码阶段减少代码中的bug?

是否可以减少android中的页面数量?

减少 OpenMP 中的数组