假设,为了解决这个问题,我们有一个内存池,其中最初分配了n个块。然而,当容量达到时,池想增长,成为它的两倍大小(2n)。
现在,这个调整大小的操作可以用C中的realloc完成,但是函数本身可能返回一个指向另一个内存的指针(复制旧的数据)。
这意味着内存池分配器返回的指针可能不再有效(因为内存可能已被移动)。
克服这个问题的好方法是什么?或者根本不可能?
发布于 2012-11-13 00:06:55
从多个非连续的内存池中分配。当一个池满时,分配另一个池,允许它位于虚拟地址空间中的其他位置。
然后,问题是跟踪您的池在哪里。通常,您会使用每个池中的一些空间进行簿记。例如,您可以保留一个指针的空间,以保留所有池的一个简单的线性链接列表。更复杂的分配器往往需要更多的簿记开销。
发布于 2012-11-13 00:07:31
malloc不是使用realloc,而是一个新的/额外的块块(假设没有理由将由池分配器管理、返回和返回的块放在一个连续的内存块中)。
https://stackoverflow.com/questions/13353615
复制相似问题