【发布时间】:2020-10-07 06:39:22
【问题描述】:
我已经用malloc 在堆中分配了一个缓冲区,然后我想增加那个缓冲区。
我不再需要缓冲区中的数据,只想增加大小。
最好的方法是什么? realloc 或 free 和 malloc?
【问题讨论】:
标签: c linux memory-management malloc realloc
我已经用malloc 在堆中分配了一个缓冲区,然后我想增加那个缓冲区。
我不再需要缓冲区中的数据,只想增加大小。
最好的方法是什么? realloc 或 free 和 malloc?
【问题讨论】:
标签: c linux memory-management malloc realloc
free() 和 malloc() 可能会更好,因为如果同一位置没有足够的空间,realloc() 必须复制数据,这是不必要的工作。
【讨论】:
使用free(),然后使用malloc()。 realloc() 函数将尝试增加已分配内存的大小,但如有必要,会将您的数据移动到新位置。由于您不再需要数据,因此这种复制是浪费时间。
【讨论】:
这接近于低级优化。长话短说:这取决于。如果您只分配相当大的缓冲区,free + malloc 可能会更好,因为您避免了旧数据的副本。但是如果你分配很小的缓冲区,alloc 可以分配比请求更多的缓冲区。在这种情况下,realloc 会更快,因为它是一个普通的无操作。
【讨论】: