文字列のマップを使用するかなり複雑なデータオブジェクトがあります
typedef std::map<std::string, unsigned int> Event;
typedef std::pair<double, Event> EventGroup;
std::vector<EventGroup> eventVector;
これは、常にバックグラウンドで実行され、着信メッセージをリッスンするプログラムです。マップに任意の数の文字列を含めることができる新しい EventGroup が入るたびに、それをベクターに追加します。
// New data came in
eventVector.push_back(newEventGroup);
時々、このベクトルを消去します
//Flush some of the data because it's old
// it's been determined that the index to erase at is flushIndex
eventVector.erase(eventVector.begin(), eventVector.begin()+flushIndex);
通常、これはデータの最初の 5% になる傾向があります。
私が気づいたのは、メモリリークがあるようだということです。メモリ使用量は 50 MB 前後から始まりますが、遅くなりすぎてクラッシュする前に 1 GB 近くになります。消去にはコストがかかると聞きましたが、これがメモリリークの原因になるのでしょうか? マップで使用されているメモリを解放する方法がありませんか?