gpt4 book ai didi

c++ - 相同大小的小对象的非常快速的对象分配器

转载 作者:行者123 更新时间:2023-11-28 02:43:50 24 4
gpt4 key购买 nike

我只需要编写一些必须具有最佳性能的代码。

要求:

我需要一个非常快速的对象分配器来快速创建对象。我的对象只有 3 个 double 。分配和释放将一次只发生一个对象。

我做了很多研究并提出:

std::vector<MyClass, boost::fast_pool_allocator<MyClass>>

我想知道(2014-07 年):

  • STL 是否有等同于 boost::boost:fast_pool_allocator 的东西?
  • 对于我所发现的,是否有更好的解决方案?

有补充信息可以回答一些评论:

  • 代码将用于优化我的算法:Code Project article on Convex Hull
  • 我需要将 C# 代码转换为 C 或 C++ 以 boost 性能。我应该与另一种用纯“C”编写的算法竞争。我刚刚发现我文章中的比较图表有错误,因为我针对用 C 编译的代码进行了 x86-Debug 测试。在 x64-release 中,“C”代码要快得多(比 x86-debug 快 4 到 5 倍)。
  • 根据 This Boost documentation还有这个Answer at StackOverFlow ,boost:fast_pool_allocator 似乎是最好的分配器,用于逐个查询相同大小的小内存块。但我想确保不存在任何其他更标准(STL 的一部分)或更快的东西。
  • 我的代码将在 Visual Studio 2013 上开发并面向任何 Windows 平台(不包括手机或平板电脑)。
  • 我的意图不是要有快速的代码,而是要有最快的代码。如果可能的话,我更喜欢不要有太多扭曲的代码,并且还寻找可维护的代码(至少是最低限度)。
  • 如果可能,我还想知道使用 std:vector 与数组(即:[])的影响。
  • 更多信息,您可以查看Wikipedia - Object pool pattern

最佳答案

与我要查找的内容最接近的是 Paulo Zemek 代码项目文章:O(1) Object Pool in C++ .

但我最终确实分配/保留了内存大小 = 可能的最大大小 * 我的对象大小。因为我没有使用任何需要比我的算法循环生命周期更长的对象,所以我欺骗说保留内存空间中的位置是对象。在我的算法循环之后,我刷新了保留的内存空间。在我看来,它是最快的。非常不优雅但非常快,只需要一次分配和一次释放。

我对答案并不完全满意,这就是我自己回答的原因。我还为每个评论的问题添加了评论,并添加了这个答案以使想法清晰。我知道我的决定/实现并不完全符合问题,但我认为它应该进行类似的事情。

关于c++ - 相同大小的小对象的非常快速的对象分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069570/

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