map的内存释放

map在erase和clear后是否会马上释放内存

参考链接:关于c++中map的内存占用问题
  (原文)原文提到map在erase和clear后不会立马释放内存,而是采用类似内存池的机制,对申请的内存进行”预留“,在一段时间内不使用才会予以“释放”。
  (在编译器MSVC1930的实际测试中)大内存空间在erase和clear后会立马释放
  (猜测)小内存空间在erase和clear后会被内存池回收

delete+erase
delete+erase:编译器MSVC1930,erase之后内存连续下降没有间断,个人猜测是和allocate的内存池分配方式有关,在erase大内存时不应该存在“预留”机制,因为这可能影响其他大内存应用的内存申请;而erase小内存则应该采用“预留”机制,因为小内存的频繁释放与申请会占用过多的cpu资源,而且容易造成内存碎片。
在这里插入图片描述
delete+clear:编译器MSVC1930,如果需要删除map分配的全部空间,clear显然比逐个erase来得更快。
在这里插入图片描述
delete:缺少clear或erase,内存泄露
在这里插入图片描述
clear:缺少delete,内存泄露
在这里插入图片描述
erase:缺少delete,内存泄露

map中stl容器是否需要手动释放内存

参考链接:map的内存释放
   (原文)map在释放内存空间时,如果有vector之类的非基本数据类型,需要进行内存空间的释放,原文中使用swap进行内存空间释放的思想同样值得学习
  (在编译器MSVC1930的实际测试中)vector在栈中申请内存,所以在实际释放内存时不需要再单独vector.clear了

在这里插入图片描述
swap+erase
在这里插入图片描述
clear+erase
在这里插入图片描述
swap+clear
在这里插入图片描述
clear+clear
在这里插入图片描述
erase
在这里插入图片描述
clear

猜你喜欢

转载自blog.csdn.net/weixin_45005811/article/details/124644267