【发布时间】:2010-11-17 14:42:17
【问题描述】:
我正在做一些图形编程,我正在使用顶点池。我希望能够从池中分配一个范围并将其用于绘图。
我需要的解决方案与 C 分配器的不同之处在于我从不调用 malloc。相反,我预先分配了数组,然后需要一个对象来包装它并跟踪可用空间并从我传入的分配中分配一个范围(一对开始/结束指针)。
非常感谢。
【问题讨论】:
标签: c++ c memory graphics allocation
我正在做一些图形编程,我正在使用顶点池。我希望能够从池中分配一个范围并将其用于绘图。
我需要的解决方案与 C 分配器的不同之处在于我从不调用 malloc。相反,我预先分配了数组,然后需要一个对象来包装它并跟踪可用空间并从我传入的分配中分配一个范围(一对开始/结束指针)。
非常感谢。
【问题讨论】:
标签: c++ c memory graphics allocation
boost::pool 很好地为你做这件事!
【讨论】:
一般来说:您正在寻找一个内存管理器,它使用(see wikipedia) memory pool(如 TokenMacGuy 回答的boost::pool)。它们有多种口味。重要注意事项:
在 boost::pool 的情况下,我认为 simple segragated storage 值得一看。 它将允许您配置具有许多不同块大小的内存池,以搜索最佳匹配。
【讨论】:
相反,我预先分配了数组,然后需要一个对象来包装它并跟踪可用空间并从我传入的分配中分配一个范围(一对开始/结束指针)。
这基本上是 malloc() 在内部所做的(不过,如果这个“预分配数组”已满,malloc() 可以增加它的大小)。所以是的,有一个算法。实际上有很多,Wikipedia 给出了一个基本的概述。不同的策略可以在不同的情况下更好地发挥作用。 (例如,如果所有块的大小都相似,或者是否有某种分配和释放模式)
如果您有许多相同大小的对象,请查看 obstacks。
您可能不想自己编写代码,这不是一件容易的事,而且出现错误可能会很痛苦。
【讨论】: