使内存系统的性能达到最大是困难的,如同在你的程序你的内存需求的不同的部分能显著地改变。Havok内存系统提供了两个操作能用来提高内存的性能,一个为时间,一个为空间。
大多数快的内存管理用池来快速管理小的内存分配。内存系统不需要去努力做一个更复杂的内存分配处理如果它在池有一个空闲的可用内存块。freelist内存和池内存在这个方面都是用的相似的机制。这个的不足之处是一旦内存块被加到一个池,它对另一个大小的分配不能是可靠的。所以如果你分配你的所有内存以128字节一块,然后你释放了它们,然后试图以256字节分配将失败,因为所有的内存是被划分128字节一块。
可以写一个分配器来检查 如果包含它的池是空闲的,但是这样的机制有一个在空间和时间上不可取的开销。为了解决这个问题,Havok内存接口提供了方法,应用程序能告诉内存分配器它应优化内存(在时间或空间)。这个最直接的方法是“garbageCollect”(垃圾收集),这个方法将使分配器在空间上优化内存。进行垃圾收集要做些工作,所以不建议每一帧都调用。最好在levers之间调用,或者在一个你的内存用法是被明显改变的点。
注意进行垃圾收集不能使所以的空闲内存可用,它只是使一个内存池空闲如果所有的包含的块是空闲。因此如果你以128字节分配所有的内存和然后释放所有其他的块,进行一个256字节的分配还是将失败,因为没有池将被释放,此外内存现在是零碎的以至于没有256字节的连续块。
进行一个垃圾收集将导致内存分配器释放当前在池空闲的内存。这个可能减缓后续的分配由于内存将不得不被底层内存系统重新分配。如果你知道你的内存使用的模式将是类似的但是想要提高内存分配的性能,你能用这个“优化”方法。这个能释放你的一些垃圾,但是大多数情况下它将重组接下来的内存分配所以它们能运行得更快。进行优化或者垃圾收集会显著提高被返回内存的实际使用性能。