如果确保清除了std :: map,则释放了内存

时间:2019-01-21 12:17:11

标签: c++ memory-management stdvector stdmap

如果用getProximityIntervalRate = (req, res) => { console.log("entered1") this.model = ProximityLocation; const startDate = req.headers.startdate, endDate = req.headers.enddate; console.log(req.headers, startDate, endDate); // TODO: server validatoin this.model.aggregate([ { $match: { 'observationTimestamp': { $gte: new Date(startDate), $lte: new Date(endDate) } } }, { $project: { regoin: 1, lessthan: { $cond: [{ $lt: ["$sensorValue.sensorValue", 5] }, 1, 0] }, morethan: { $cond: [{ $gt: ["$sensorValue.sensorValue", 5] }, 1, 0] } } }, { $group: { _id: { regoin: "$sensorValue.regoin" }, countSmaller: { $sum: "$lessThan" }, countBigger: { $sum: "$moreThan" } uh } }, ], (err, location) => { console.log('location', location); if (!location) { return res.sendStatus(404); } res.status(200).json(location); }); } 清除了std::vector vec,则不能立即释放分配的内存。向量的vec.clear()将为零,但size将/可以保持不变。

这是一种非常有益的行为,因为可以清除较大的向量并为其分配新的值,而无需进行昂贵的内存取消/分配。此外,内存也将减少碎片化。

一个人可以用capacity shrink_to_fit来强制执行。

vec.shrink_to_fit()具有std::map功能,但没有clearshrink_to_fit之后存储地图所需的内存会发生什么?

cppreference.com指出map.clear()删除了容器中的所有元素。调用之后,size()返回零。

1 个答案:

答案 0 :(得分:4)

  

一个人可以通过vec.shrink_to_fit()来强制执行该命令。

实际上,shrink_to_fit不会强制释放内存。它只是允许它。允许实现不取消分配。

  

如果已清除std :: map,则确保已释放内存

不。保证标准容器释放内存的唯一情况是销毁它们时。

Map没有vector具有的容量概念,因此它不需要shrink_to_fit。清除后的映射与清除+收缩后适配的矢量处于相同的情况:它不需要分配任何内存...但是也不禁止分配它。