2011-10-31 115 views
2

我写一个realloc函数,目前我的realloc处理两种情况(不包括空的情况下)优化realloc函数

  1. 如果存在旁边块足够的内存,展开它
  2. 其他分配一个新的块和做一个memcpy

我的问题是,有没有更多的情况下,我应该处理?我想不出任何。

我想到了一个情况,其中前一个区块可能是免费的,并扩大我前面的块,但这将需要一个memcpy,所以这将是毫无意义的实现。

+0

是,一个运动(无论是自我强加或家庭作业)?任何stdlib的realloc应该已经表现如此。我没有遇到过,但没有。关于这个问题,你已经涵盖了我能想到的所有案例。 –

+0

考虑'相同大小'的情况 - 不太可能,但确保没有任何破坏。 –

回答

3

包括新尺寸小于旧尺寸的情况;理想情况下,你应该分割你的当前块并使其结束。

+0

是的,这是作业的一部分。感谢您提醒我关于重新调整大小减小块大小的情况。我会尝试一下,看看我的内存利用率增加了多少(我的教授对利用率和吞吐量进行了测试)。 – user1022223

0

有些情况下,realloc通过一个非常重要的数值来减少块大小,这是值得回收用于其他地方的分配。

0

您可以努力优化realloc的性能(即避免移动块和memcpy),或者您可以针对内存碎片进行优化。

如果是后者,你可以考虑移动块来填补最好的空白,而不是扩大或缩小它。

内存分配器总是一个权衡。