Я написал небольшое серверное приложение.Он хранит много данных в строках.При стресс-тестировании объем памяти RSS увеличивается (определяется $ top).
Я запустил программу через «Инструмент» - приложение утечки памяти в Mac OS X и обнаружил лишь некоторые незначительные утечки - утечка памяти была паройсотен байтов и программа непрерывно растет.При более глубоком поиске кажется, что две основные функции занимают большую часть занимаемой памяти:
std::string serialize()
{
//Build basic message
std::string result="";
//std::cout << "result: " << result << "\n";
result+=m_topic+d;
//std::cout << "result: " << result << "\n";
result+=m_message+d;
//std::cout << "result: " << result << "\n";
char buf[12];
std::cout << m_severity << "\n";
snprintf(buf, sizeof(buf), "%d", m_severity);
//std::cout << "Buffer:" << buf << "\n";
std::string temp(buf);
result+=temp+d;
//std::cout << "result: " << temp << "\n";
int messagelength=strlen(result.c_str());
snprintf(buf, sizeof(buf), "%d", messagelength);
//std::cout << "Buffer:" << buf << "\n";
std::string temp2(buf);
temp2+=d;
temp2+=result;
//std::cout << "result: " << temp2 << "\n";
return temp2;
}
и
std::string message::prettyPrint()
{
struct tm *Sys_T= NULL;
time_t Tval = 0;
Tval = time(NULL);
Sys_T = localtime(&Tval);
std::string date;
char buf[10];
sprintf(buf,"%d:%d:%d (%d/%d 2010)",Sys_T->tm_hour, Sys_T->tm_min, Sys_T->tm_sec, Sys_T->tm_mday, Sys_T->tm_mon);
date+=std::string(buf);
char sevbuf[10];
sprintf(sevbuf,"%d",m_severity);
delete Sys_T;
std::string printed= "---------------------Message--------------------- \n";
printed+= +"\n "+ date + ": [[" + getTopic() + "]]\n\n" +
+ " Message:" + m_message + "\n"
+ " Severity " + std::string(sevbuf) +" \n";
//+ " Serialized " + serialize() + "\n";
return printed;
}
Как вы можете видеть, это всего лишь стек выделенных объектов.
В то же время обозреватель памяти «Инструмент» сообщает, что количество «активной» выделенной памяти не увеличивается.
Я не очень знаком с программированием или этими терминами - мой вопросis:
- Может ли мое приложение утекать память, о которой не сообщает приложение поиска утечек памяти?
- RSS не сообщает об "активном" наборе памяти, но также и о хронологических?*