繁体   English   中英

优化重新分配功能

[英]Optimizing realloc function

我正在编写一个realloc函数,当前我的realloc处理两种情况(不计算空情况)

  1. 如果该块旁边有足够的内存,则将其展开
  2. 否则分配一个新的块,并做一个memcpy

我的问题是,我还要处理更多案件吗? 我想不到。

我想到了这样一种情况,上一个块可能是空闲的,并且可以向前扩展我的较早块,但这将需要一个memcpy,因此实现该目标将毫无意义。

包括新尺寸小于旧尺寸的情况; 理想情况下,您应该拆分当前块并将其末尾释放。

乱分配内存分配例程非常危险; 大多数已经在不影响安全性的前提下进行了物理上的优化。 您可能进行的任何优化都可能会很好地利用这个漏洞-目前有许多“免费使用后”样式的安全问题。

考虑到这一点,在哪里比OpenBSD源代码更好看: http : //www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c? rev=1.140;content- 类型=文本%2FX-cvsweb的标记

在某些情况下,重新分配会将块大小减少了不小的数量,值得回收再分配到其他位置。

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

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

内存分配器始终是一个折衷方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM