我有一个非常复杂的数据对象,它使用了一个字符串映射
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。我听说进行擦除是一项昂贵的操作,但这可能是内存泄漏的原因吗?我是否错过了一些释放地图使用的内存的方法?