我发现很多次我只需要一个小std::map
(比如少于10个键),或者只需要一些元素的小std::vector
,我认为它真的是浪费性能总是动态地分配它们,特别是在std::map<std::string, std::string>
,std::vector<std::string>
这样的结构中,实际上涉及很多动态分配。
有什么好建议吗?至少减少动态分配的数量,更好地不牺牲易用性。感谢
答案 0 :(得分:4)
您可以将堆栈分配的内存用于小型大小的数据(因为堆栈分配非常快,基本上只是堆栈指针移动;尽管堆栈&#39; s空间是宝贵的,它是一个非常有限的资源),堆分配更大的大小的内存。换句话说,请按照std::string
小字符串优化的方式进行思考。
此外,为了加快分配速度,您还可以预先在堆上分配大内存块,然后在这些块内部分配较小的分配,再次基本上只是增加块内的指针。有关此池分配器技术的示例实现,请考虑阅读this blog post。
你会发现这个CppCon 2016的演讲也很有趣: