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