【问题标题】:Given an Array, is there an algorithm that can allocate memory out of it?给定一个数组,是否有一种算法可以从中分配内存?
【发布时间】:2010-11-17 14:42:17
【问题描述】:

我正在做一些图形编程,我正在使用顶点池。我希望能够从池中分配一个范围并将其用于绘图。

我需要的解决方案与 C 分配器的不同之处在于我从不调用 malloc。相反,我预先分配了数组,然后需要一个对象来包装它并跟踪可用空间并从我传入的分配中分配一个范围(一对开始/结束指针)。

非常感谢。

【问题讨论】:

    标签: c++ c memory graphics allocation


    【解决方案1】:

    boost::pool 很好地为你做这件事!

    【讨论】:

      【解决方案2】:

      一般来说:您正在寻找一个内存管理器,它使用(see wikipedia) memory pool(如 TokenMacGuy 回答的boost::pool)。它们有多种口味。重要注意事项:

      • 块大小(固定或可变;不同块大小的数量;能否预测块大小的使用情况(统计)?
      • 效率(一些管理器有 2^n 块大小,即用于网络堆栈,他们在其中搜索最适合的块;非常好的性能并且不会以浪费内存为代价的碎片)
      • 管理开销(我假设您将拥有许多非常小的块;因此内存管理器维护的整数和指针的数量对于提高效率非常重要)

      在 boost::pool 的情况下,我认为 simple segragated storage 值得一看。 它将允许您配置具有许多不同块大小的内存池,以搜索最佳匹配。

      【讨论】:

        【解决方案3】:

        相反,我预先分配了数组,然后需要一个对象来包装它并跟踪可用空间并从我传入的分配中分配一个范围(一对开始/结束指针)。

        基本上是 malloc() 在内部所做的(不过,如果这个“预分配数组”已满,malloc() 可以增加它的大小)。所以是的,有一个算法。实际上有很多,Wikipedia 给出了一个基本的概述。不同的策略可以在不同的情况下更好地发挥作用。 (例如,如果所有块的大小都相似,或者是否有某种分配和释放模式)

        如果您有许多相同大小的对象,请查看 obstacks。

        您可能不想自己编写代码,这不是一件容易的事,而且出现错误可能会很痛苦。

        【讨论】:

          猜你喜欢
          • 2020-03-11
          • 2014-07-20
          • 1970-01-01
          • 1970-01-01
          • 2016-11-22
          • 1970-01-01
          • 1970-01-01
          • 2014-08-30
          • 1970-01-01
          相关资源
          最近更新 更多