【问题标题】:Memory management patterns内存管理模式
【发布时间】:2015-05-04 13:27:42
【问题描述】:

我想知道其他可能比使用工厂更有效的模式。

【问题讨论】:

  • 我不确定您所说的“比工厂更有效率”是什么意思。通常,工厂为您提供程序员的服务,以更好地跟踪对象的分配、索引和删除。因此,如果存在更高效的东西,您也可以将其打包到工厂中。我也想知道..您的内存消耗实际上有多大?您实际上可以利用回收而不是删除和分配多少时间?你做过基准测试吗?
  • 参见 C++ 分配器概念和/或内存池 - 例如,std::vector 类模板可以提供一个分配器来控制内存分配的方式 - 这样用户就可以控制分配策略他自己。你可以在你的库中提供类似的机制。
  • 您可以让工厂创建由共享智能指针处理的对象。从特定大小的池中获取这些将帮助您控制内存消耗。如果达到限制,您可以扩大池或抛出异常。
  • @Imad 因为客户端和池存储指向对象的指针。使用智能指针可以安全地收缩池。

标签: c++ design-patterns memory-management raii


【解决方案1】:

您可以使用内存池,增强型非常好: http://www.boost.org/doc/libs/1_58_0/libs/pool/doc/html/boost_pool/pool.html

每个客户端都可以配置池的最大大小。 分配和释放会非常快,而且你会放弃你的工厂实现

【讨论】:

    【解决方案2】:

    先测量。如果你还没有证明你的分配器是一个性能问题,那么你不应该优化它。您不释放内存的解决方案实际上可能表现更差(例如,如果您使用简单的空闲列表,您可能会在遍历列表时花费大量时间来处理缓存未命中)。

    如果内存分配是一个瓶颈,请寻找更好的分配器。 TCMalloc 很不错,如果你想花很多钱,也有商业和跨平台的解决方案。

    但是在你做任何激烈的事情之前使用分析器和测量。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2011-11-29
      • 1970-01-01
      • 2014-12-01
      • 2012-12-17
      • 2011-07-21
      相关资源
      最近更新 更多