我们遇到了一些内部开发的应用程序的一个奇怪的问题,并认为它在代码中很深,但我们写了一个快速样本来测试它,我们遇到了同样的问题。直到文件被删除之前,内存还没有给出?
下面是示例代码:
#include <stdio.h>
int main(void)
{
int i;
int j;
int COUNT = 750000;
double x[100];
double y[100];
FILE *OutputFile1;
FILE *OutputFile2;
FILE *OutputFile3;
FILE *OutputFile4;
FILE *OutputFile5;
FILE *OutputFile6;
FILE *OutputFile7;
FILE *OutputFile8;
FILE *OutputFile9;
OutputFile1 = fopen("Output_file_1.dat","w");
OutputFile2 = fopen("Output_file_2.dat","w");
OutputFile3 = fopen("Output_file_3.dat","w");
OutputFile4 = fopen("Output_file_4.dat","w");
OutputFile5 = fopen("Output_file_5.dat","w");
OutputFile6 = fopen("Output_file_6.dat","w");
OutputFile7 = fopen("Output_file_7.dat","w");
OutputFile8 = fopen("Output_file_8.dat","w");
OutputFile9 = fopen("Output_file_9.dat","w");
/* Do stuff in here */
/* Initialize the arrays */
for(i = 0; i < 100; i++)
{
x[i] = 2.50 * (double)i;
y[i] = 10.0 * (double)i;
}
printf("Initialized the x and y arrays\n");
/* Write junk to files */
for(i = 0; i < COUNT; i++)
{
printf("Outer loop %d\n", i);
for(j = 0; j < 100; j++)
{
fprintf(OutputFile1," %e", x[j]);
fprintf(OutputFile2," %e", x[j]);
fprintf(OutputFile3," %e", x[j]);
fprintf(OutputFile4," %e", x[j]);
fprintf(OutputFile5," %e", x[j]);
fprintf(OutputFile6," %e", y[j]);
fprintf(OutputFile7," %e", y[j]);
fprintf(OutputFile8," %e", y[j]);
fprintf(OutputFile9," %e", y[j]);
}
fprintf(OutputFile1,"\n");
fprintf(OutputFile2,"\n");
fprintf(OutputFile3,"\n");
fprintf(OutputFile4,"\n");
fprintf(OutputFile5,"\n");
fprintf(OutputFile6,"\n");
fprintf(OutputFile7,"\n");
fprintf(OutputFile8,"\n");
fprintf(OutputFile9,"\n");
}
/* End doing stuff here */
fflush(OutputFile1);
fclose(OutputFile1);
fflush(OutputFile2);
fclose(OutputFile2);
fflush(OutputFile3);
fclose(OutputFile3);
fflush(OutputFile4);
fclose(OutputFile4);
fflush(OutputFile5);
fclose(OutputFile5);
fflush(OutputFile6);
fclose(OutputFile6);
fflush(OutputFile7);
fclose(OutputFile7);
fflush(OutputFile8);
fclose(OutputFile8);
fflush(OutputFile9);
fclose(OutputFile9);
return(0);
}
所以,这里是当您运行此会发生什么。如果你在一个终端窗口中运行它,并在运行时在另一个终端窗口中运行它,你会注意到你的内存被吃掉了。大约需要8分钟才能运行,并且完成后,系统不会返回内存,直到文件被删除。一旦文件被删除,所有的内存都被释放回系统。
这只是C与最新的gcc编译器,CentOs 6.3。
难道我们失去了一些东西?
谢谢!
非常有意义,谢谢! – speedpacer