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