我有以下用于编写日志的函数,它是在包括Windows和AIX在内的多个操作系统上运行的程序的一部分。问题是它在AIX上运行时导致内存泄漏,正在发生持续的内存增加,如果我只是删除代码,特别是fwrite
调用,则情况并非如此。
void print_msg(char* header, char* msg)
{
string buffer = "-------\n";
buffer.append(header);
buffer.append(msg);
buffer.append("\n------\n");
fwrite(buffer.c_str(), sizeof(char), buffer.length(), pFile);
fflush(pFile);
}
文件在程序启动时打开,在程序终止前关闭。
值得一提的是,我使用以下命令来监视程序的内存消耗:
svmon -P <process_id> -O summary=basic,unit=MB
svmon
命令的示例输出,我每隔几秒钟随机运行一次:
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 251.34 37.1 9.98 121.73
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 368.27 37.1 9.98 238.66
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 479.12 37.1 9.98 349.51
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 483.56 37.1 9.98 350.09
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 485.14 37.1 9.98 350.09
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 486.57 37.1 9.98 350.09
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 491.15 37.1 9.98 350.09
-----------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 494.87 37.1 9.98 350.09
------------------------------------------------
Pid Inuse Pin Pgsp Virtual
10158210 496.44 37.1 9.98 350.09
问题是:这段代码出了什么问题?