频繁进行读写文件,内存增长发现一个不解的事,请高人指点,当频繁进行读写文件时,使用的内存会增长。写了一个
频繁进行读写文件,内存增长
发现一个不解的事,请高人指点,当频繁进行读写文件时,使用的内存会增长。
写了一个测试例,测了一下,如下所示:
test.cpp
#include <stdio.h>
int main()
{
FILE *fd;
char buf[32];
int numwritten;
while(true)
{
fd = fopen("testfile.txt","a+");
if(NULL == fd)
{
printf("open file error!");
return 0;
}
for ( int i = 0; i < 26; i++ )
buf[i] = (char)('z' - i);
/* Write 26 characters to stream */
numwritten = fwrite( buf, sizeof( char ), 25, fd );
printf( "Wrote %d items\n", numwritten );
if ( fflush(fd) != 0 )
{
printf(" fflush error");
return 0;
}
if ( fclose(fd) != 0 )
{
printf("fclose error");
return 0;
}
}
return 1;
}
在linux下面运行时,使用内存会不断增长,感觉不应该啊,请达人赐教
[解决办法]
写的时候文件被映射到内存中??
[解决办法]
读写文件都有缓冲,文件会被缓冲进内存,而且现代操作系统的缓冲区极大,貌似内存有多大就能缓存多大
[解决办法]
[解决办法]
内存怎么增长了?
你用top看的么?
缓冲区是固定的,fopen不要放到while里好么?只需要fopen一次啊。你可以写多次啊。
[解决办法]
linux写磁盘时先放在内存里的吧,要执行以下sync才能全部同步到硬盘上。
[解决办法]
fd = fopen("testfile.txt","a+");
这个没有创建很多文件啊,你只是追加的方式在写啊,while中fopen频繁打开文件也会影响性能的。
另外,可以设个缓冲,一次写入大的数据块,不要频繁写文件。
[解决办法]
会不会和内存的分配与释放机制有关,每次打开文件都要分配FILE结构和读写缓冲区,关闭以后这些内存并没有立刻归还给操作系统?
