我正在编写一个realloc函数,目前我的realloc处理了两种情况(不包括空指针的情况)
- 如果块旁边有足够的内存,就扩展它
- 否则分配一个新块并进行memcpy
我的问题是,我是否应该处理更多的情况?我想不出还有什么情况需要处理。
我想到一种情况,即以前的块可能是空闲的,并且可以向前扩展我的早期块,但这将需要进行memcpy,因此实现这个功能是没有意义的。
我正在编写一个realloc函数,目前我的realloc处理了两种情况(不包括空指针的情况)
我的问题是,我是否应该处理更多的情况?我想不出还有什么情况需要处理。
我想到一种情况,即以前的块可能是空闲的,并且可以向前扩展我的早期块,但这将需要进行memcpy,因此实现这个功能是没有意义的。
请确保考虑到新尺寸小于旧尺寸的情况;最好拆分您当前的块并使其末尾空闲。
有些情况下,realloc 函数会将块的大小减少一个值,这个值是值得回收以便在其他地方分配的。
你可以尝试优化realloc
以提高性能(即避免移动块和memcpy
),或者你可以针对内存碎片进行优化。
如果是后者,你可以考虑将块移动到填充最佳间隙处,而不仅仅是扩展或缩小它。
内存分配器始终是一种权衡。