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
|