如何避免动态分配小对象?

时间:2017-01-20 12:15:49

标签: c++ c++11 memory-management

我发现很多次我只需要一个小std::map(比如少于10个键),或者只需要一些元素的小std::vector,我认为它真的是浪费性能总是动态地分配它们,特别是在std::map<std::string, std::string>std::vector<std::string>这样的结构中,实际上涉及很多动态分配。

有什么好建议吗?至少减少动态分配的数量,更好地不牺牲易用性。感谢

1 个答案:

答案 0 :(得分:4)

您可以将堆栈分配的内存用于小型大小的数据(因为堆栈分配非常快,基本上只是堆栈指针移动;尽管堆栈&#39; s空间是宝贵的,它是一个非常有限的资源),分配更大的大小的内存。换句话说,请按照std::string 小字符串优化的方式进行思考。

此外,为了加快分配速度,您还可以预先在堆上分配大内存块,然后在这些块内部分配较小的分配,再次基本上只是增加块内的指针。有关此池分配器技术的示例实现,请考虑阅读this blog post

你会发现这个CppCon 2016的演讲也很有趣:

  

High Performance Code 201: Hybrid Data Structures