【发布时间】:2017-01-20 12:15:48
【问题描述】:
我发现很多时候我只需要一个小的std::map(比如少于10个键),或者一个只包含几个元素的小std::vector,我认为总是动态分配它们真的很浪费性能,尤其是在std::map<std::string, std::string>、std::vector<std::string> 这样的结构中,确实涉及到很多动态分配。
有什么好的建议吗?至少减少动态分配的量,更好的不牺牲易用性。谢谢
【问题讨论】:
-
通常,如果这是您代码中的瓶颈,一种方法是编写或使用memory pool。本质上,您预先分配了一堆内存,然后一遍又一遍地重新使用它,而无需重新分配。
-
如果您使用飞行关键软件,您总是可以在初始化期间分配空间。否则,如果您需要一些真正的性能或遇到瓶颈,则必须编写自定义内存分配器。
-
您是否实际测量过此类分配的成本?仅仅将代码片段“思考”为瓶颈就是更改代码的构建指南。因此,请首先执行一些措施来验证这项工作是否值得。
-
您可以将std::vector::reserve与向量一起使用,或将Allocators与其他容器一起使用来实现您自己的分配策略。
-
这个问题对我来说太宽泛了。您是否正在尝试解决实际问题?谈论 10 个元素然后抱怨总是将它们分配为性能问题......好吧,我的猜测是您在性能问题方面缺乏经验让您认为那里有问题。
标签: c++ c++11 memory-management