当前位置: 技术问答>linux和unix
求助 关于 fprintf 是否泄漏内存?
来源: 互联网 发布时间:2016-03-01
本文导语: 小弟斜了一个程序。我用的是 虚拟机下 arch 0.7。 程序定时写文件,我就用 fprintf 写一个流。 程序中malloc 的内存,都对应 free。 用 free 命令观察 内存情况。发现,会定时少 60 k 内存。没有运行其它程序。 ...
小弟斜了一个程序。我用的是 虚拟机下 arch 0.7。
程序定时写文件,我就用 fprintf 写一个流。
程序中malloc 的内存,都对应 free。
用 free 命令观察 内存情况。发现,会定时少 60 k 内存。没有运行其它程序。
挡注释掉 fprintf 函数后,内存使用就是正常的。
不知道这些内存是不是会在 ,内存不够用时,清理出来,还是泄漏了。
请大家多指教。
程序定时写文件,我就用 fprintf 写一个流。
程序中malloc 的内存,都对应 free。
用 free 命令观察 内存情况。发现,会定时少 60 k 内存。没有运行其它程序。
挡注释掉 fprintf 函数后,内存使用就是正常的。
不知道这些内存是不是会在 ,内存不够用时,清理出来,还是泄漏了。
请大家多指教。
|
你用free看的时候,不要只看free这一项,还要注意buffers和cached这两项,这两项相当于缓冲,并不是真正用掉的内存。
|
你用free看的是系统的空闲页面,对于一个进程来说,是不准确的.即使你不运行你的程序,你不停的free,free值也会发生变化的.
比如,你分配的一段空间,用free释放后,用free查看,空闲空间并不马上变大.虽然你free了,但是系统把它缓冲起来了,预备你下次在调用分配相同大小的空间.
比如,你分配的一段空间,用free释放后,用free查看,空闲空间并不马上变大.虽然你free了,但是系统把它缓冲起来了,预备你下次在调用分配相同大小的空间.
|
如cceczjxy所言,free看并不准确,特别是你运行了若干次之后,因为系统本身还有一些后台进程在运行。
你可以看-/+ buffers/cache那一行,就是真实的结果,看上去是少了一些内存。不过不关闭fd不会引起这样的问题,而系统调用和C函数也不会有内存泄漏,你看是否分配了内存没有释放。
如果不放心,可以用memprof工具查看是否有内存泄漏,可以查看帮助,用特定的编译选项编译,再用memprof启动,这样就能知道是否有泄漏。
你可以看-/+ buffers/cache那一行,就是真实的结果,看上去是少了一些内存。不过不关闭fd不会引起这样的问题,而系统调用和C函数也不会有内存泄漏,你看是否分配了内存没有释放。
如果不放心,可以用memprof工具查看是否有内存泄漏,可以查看帮助,用特定的编译选项编译,再用memprof启动,这样就能知道是否有泄漏。
|
写的是什么流?
是不是先写到内存,定时刷新的
是不是先写到内存,定时刷新的
|
使用fnprintf防止内存泄露