优化realloc函数

3

我正在编写一个realloc函数,目前我的realloc处理了两种情况(不包括空指针的情况)

  1. 如果块旁边有足够的内存,就扩展它
  2. 否则分配一个新块并进行memcpy

我的问题是,我是否应该处理更多的情况?我想不出还有什么情况需要处理。

我想到一种情况,即以前的块可能是空闲的,并且可以向前扩展我的早期块,但这将需要进行memcpy,因此实现这个功能是没有意义的。


这是一项练习(无论是自我规定的还是作业)吗?任何标准库的realloc应该已经有了相应的行为。我还没有遇到过不符合要求的。关于这个问题,你已经涵盖了我能想到的所有情况。 - Daniel Fischer
考虑“相同大小”的情况——这种情况不太可能发生,但请确保没有任何问题。 - Jonathan Leffler
4个回答

4

请确保考虑到新尺寸小于旧尺寸的情况;最好拆分您当前的块并使其末尾空闲。


是的,感谢您提醒我重新调整大小会减小块的大小。我会尝试一下,看看我的内存利用率增加了多少(我的教授有一个关于利用率和吞吐量的测试)。 - user1022223

1

0

有些情况下,realloc 函数会将块的大小减少一个值,这个值是值得回收以便在其他地方分配的。


0

你可以尝试优化realloc以提高性能(即避免移动块和memcpy),或者你可以针对内存碎片进行优化。

如果是后者,你可以考虑将块移动到填充最佳间隙处,而不仅仅是扩展或缩小它。

内存分配器始终是一种权衡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接