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