gpt4 book ai didi

c++ - STL 链接结构如何处理分配?

转载 作者:行者123 更新时间:2023-11-30 00:44:33 25 4
gpt4 key购买 nike

C++ 标准模板库提供了许多容器类型,它们具有非常明显的链接结构实现,例如 listmap

高度链接结构的一个非常基本的优化是使用自定义子分配器和一个提供固定大小分配的私有(private)内存池。鉴于 STL 对性能的重视,我希望执行此优化或类似的优化。同时,所有这些容器都有一个可选的 Allocator 模板参数,能够为已经使用自定义分配器的对象提供自定义分配器似乎在很大程度上是多余的。

因此,如果我正在寻找具有 STL 的最高性能链接结构,我是否需要指定自定义分配器,或者我是否可以指望 STL 为我完成这项工作?

最佳答案

这在很大程度上取决于您的工作量。

如果您不经常遍历您的数据结构,甚至不必费心优化任何东西。您最好将时间花在其他地方。

如果您确实进行了迭代,但您的有效负载很大并且每个项目都做了很多工作,那么默认实现不太可能成为瓶颈。迭代的低效率将被每项工作所吞噬。

如果你存储小元素(整数,指针),你做一些琐碎的操作并且你在结构中迭代很多,那么你会从像 std::vector 或 boost::flat_map 这样的东西中获得更好的性能,因为它们允许更好的预取操作。

当您发现自己分配和释放大量小块内存时,分配器最有用。这会导致内存碎片并可能影响性能。

与所有性能建议一样,您需要在目标机器上对工作负载进行基准测试。

附言确保打开优化(即 -O3)。

关于c++ - STL 链接结构如何处理分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com