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