有感于STL的内存管理
1. 背景 前些天在一个技术分享会上,某大牛说,STL使用了内存池,释放内存的时候,并不释放给OS,而是自己由留着用。 听到这些观点后,我就有些着急了,因为我以前一直是直接使用STL的一些工具类的,比如std::string、std::map、std::vector、std::list等等,从来都没有关注过内存的问题。 带着内存的问题,我花了两三天的时间去阅读STL的代码,并且写一些简单的程序进行测试;下面列举一些心得体会,但是却没有什么大的结论 -.- 2. 容易误解的简单例子 我们以STL中的map为例,下面有一个使用map的简单例子,大部分人可以在30秒内写好。 void testmap() { map<int, float> testmap; for (int i = 0; i < 1000000; i++) { testmap[i] = (float)i; } testmap.clear(); } 为了在调用map::clear()之后查看进程的内存使用量,我们可以加几行代码让程序暂停一下。 void testmap() { map<int, float> testmap; for (int i = 0; i < 1000000; i++) { testmap[i] = (float)i; } testmap.clear(); // 观察点 int tmp; cout <