我正在编写一个realloc函数,目前我的realloc处理两种情况(不包括空案例)
我的问题是,我还应该处理更多的案件吗?我什么都想不到。
我想到了前一个块可能是空闲的情况,并且可以扩展我之前的块,但这需要一个memcpy,所以实现它是没有意义的。
答案 0 :(得分:3)
包括新尺寸小于旧尺寸的情况;理想情况下,您应该拆分当前块并使其结束。
答案 1 :(得分:1)
搞乱内存分配例程是非常危险的;大多数已经在物理上可以优化,而不会影响安全性。你可能做的任何优化都可能很好地打开一个可以被利用的漏洞 - 目前有很多“免费使用”式的安全问题。
考虑到这一点,比OpenBSD源更适合它:http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c?rev=1.140;content-type=text%2Fx-cvsweb-markup
答案 2 :(得分:0)
在某些情况下,realloc会将块大小减少一些值得回收用于其他地方的非平凡量。
答案 3 :(得分:0)
您可以努力优化realloc
的性能(即避免移动块和memcpy
),或者您可以优化内存碎片。
如果是后者,您可以考虑移动块以填补最佳间隙,而不是仅仅扩展或缩小它。
内存分配器始终是一种权衡。