当前位置: 技术问答>linux和unix
fwrite()内存增长?w+与a+效率有区别?
来源: 互联网 发布时间:2017-05-03
本文导语: 平台A: Linux 2.6.9-89.ELsmp #1 SMP Mon Jun 22 12:32:43 EDT 2009 i686 i686 i386 GNU/Linux 平台B: Linux 2.6.32-71.el6.x86_64 #1 SMP Wed Sep 1 01:33:01 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux 同样的写日志 demo 程序,一个for循环,不断的...
平台A: Linux 2.6.9-89.ELsmp #1 SMP Mon Jun 22 12:32:43 EDT 2009 i686 i686 i386 GNU/Linux
平台B: Linux 2.6.32-71.el6.x86_64 #1 SMP Wed Sep 1 01:33:01 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
同样的写日志 demo 程序,一个for循环,不断的调用写日志接口,usleep(1),
在A上运行正常,此处的正常,指的是内存正常,
在B上,则“内存”一直增加.将fwrite()注释掉,则在B上也正常。
平台B: Linux 2.6.32-71.el6.x86_64 #1 SMP Wed Sep 1 01:33:01 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
同样的写日志 demo 程序,一个for循环,不断的调用写日志接口,usleep(1),
在A上运行正常,此处的正常,指的是内存正常,
在B上,则“内存”一直增加.将fwrite()注释掉,则在B上也正常。
if (m_pFile == NULL)
{
//将w+改为a+,增长的速度也不一样
const char* szOpenMode = "w+"; //默认打开方式,追加
m_pFile = fopen(m_strCurFile.c_str(), szOpenMode);
if(m_pFile == NULL)
{
printf("ospext-CXLogFile::WriteLogFileNew-fopen[%s] failn", m_strCurFile.c_str());
}
}
if(m_pFile != NULL)
{
//在B上将fwite注释掉之后,也运行正常
fwrite(strLog.c_str(),strLog.size(), 1, m_pFile);
fflush(m_pFile);
}
|
如果要检测内存泄露,最好用valgrind等专业工具,直接看是不靠谱的
|
fclose(m_pFile)
|
fwrite 有缓冲区, fclose 肯定能释放
fflush也能释放,但问题是内存一直增加
建议判断下 fflush 的返回值
或者直接用write,就不会有这样的问题
fflush也能释放,但问题是内存一直增加
建议判断下 fflush 的返回值
或者直接用write,就不会有这样的问题
|
你关注下vmstat,看是不是内存都用来做cache了