优化realloc功能

时间:2011-10-31 15:28:01

标签: c

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

  1. 如果块旁边有足够的内存,请将其展开
  2. else分配一个新块并执行memcpy
  3. 我的问题是,我还应该处理更多的案件吗?我什么都想不到。

    我想到了前一个块可能是空闲的情况,并且可以扩展我之前的块,但这需要一个memcpy,所以实现它是没有意义的。

4 个答案:

答案 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),或者您可以优化内存碎片。

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

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