计算c ++ map的内存

时间:2016-07-14 17:00:17

标签: c++ stl

每5分钟执行一次功能。如果功能正在进行中,则进程的内存将达到1.2G!如果删除该功能,内存将约为20M。功能是:

string sql = "SELECT * FROM info";
MysqlData rset = mysql.queryRecord(sql);
map<string, int> temp;
for (size_t i = 0; i < rset.size(); i++) {
    const string& circleId = rset[i]["id"];
    const int category = strto<int>(rset[i]["subject"]);
    temp[circleId] = category;
}
if (!temp.empty()) {
    m_category.swap(temp); //m_category is global variable.
}

db中有大约300,000条记录。字段id的长度约为36 B,字段主题的值是0到20之间的数字。因此元素的大小为40 B.   因此,在我看来,m_category的大小是:   40 * 300000 = 120,00,000 = 12M   但12M远小于1.2G!为什么?   顺便说一句,我使用命令top和RES来查看进程的内存。   如何计算地图元素的记忆?

1 个答案:

答案 0 :(得分:0)

总结其他人在上面评论过的内容。你的问题的答案是:你有内存泄漏。并且它不在您的函数中,它位于您未能在此处发布的MysqlData类中。因此,如果您需要进一步的帮助,您必须向我们所有人提供所有信息。