- 締切済み
fopen/fcloseでメモリリーク?
Linux2.4系です。 Cプログラムでログファイルをフラッシュドライブ上のファイルに書き足していく処理があり、 デバッグテストで処理を高速に繰り返しながらコマンドラインのfreeコマンドでメモリ残量を 確認すると、かなり速いペースでキャッシュが減ります。 原因と対処法をご存じの方、おられないでしょうか? 処理は概ね以下のような感じです。 FILE *log_file; log_file = fopen( "../log/0001.txt" , "a+" ); fwrite( &text1, 1, sizeof(text1), log_file ); fclose( log_file ); 頻度は毎秒3回くらいで書き足すテキストは1kバイト程度です。 fwrite()を止めてもメモリ減少は止まらないですが、fopenとfclose を止めると減少しなくなります。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10361)
キャッシュが減ってバッファーが増えているなら正常です。 そもそもキャッシュが減ることでメモリリークを心配するのが間違いで、何の関係もありません。 cat /proc/プロセス番号/status をしてみて、VmSize というのがそのプロセスが使っている論理メモリサイズです。プロセスは定常状態のはずなのに、これがどんどん増え続けるならメモリリークです。
- a-saitoh
- ベストアンサー率30% (524/1722)
そのまま動かし続けたらどうなりますか? 空きメモリはあっても役に立たないので、本当にメモリが足りなくなるまでメモリ回収処理をしないということもありえます。メモリ不足が起きないのなら気にすることはないでしょう。 メモリ不足というのは、メモリ残量が少なく表示されることではなく、メモリを使うプログラムが動いたときにそのプログラムがメモリ確保に失敗することだと考えてください。