我已经用malloc
在堆中分配了一个缓冲区,然后我想增加该缓冲区。
我不再需要缓冲区中的数据,只想增加大小。
最好的方法是什么?realloc
还是free
和malloc
?
free()
和malloc()
可能更好,因为如果同一位置没有足够的空间可用,realloc()
必须复制数据,这是一项不必要的工作。
使用free()
然后malloc()
。realloc()
函数将尝试就地增加已分配内存的大小,但会在必要时将数据移动到新位置。 由于您不再需要数据,因此这种复制是浪费时间。
这接近于低级优化。长话短说:这取决于。如果只分配相当大的缓冲区,则free
+malloc
可能会更好,因为您可以避免复制旧数据。但是,如果分配微小的缓冲区,alloc
分配的缓冲区可能会超过请求的缓冲区。在这种情况下,realloc
会更快,因为它将是一个普通的无操作。