C重新分配/ malloc替代

时间:2012-11-10 20:07:29

标签: c malloc realloc

我有一块内存,我想重新分配到不同的大小,但我不在乎内存是否被丢弃。释放()内存然后malloc()一个新的内存块,或者realloc()是否可以更快?

我认为任何一种解决方案都不是最佳的,因为需要执行额外的工作。我认为realloc()在定位足够大的内存块方面更快,因为当前片段可能大或小到足以容纳新的内存块。但是,如果片段不够大,它必须复制malloc()没有的内存。

我正在使用Linux。对此可能有一个特殊的功能吗?

谢谢! :)

3 个答案:

答案 0 :(得分:2)

如果您不关心内容,标准惯用法是free后跟malloc。查找块比复制块便宜,并且无法保证realloc不会自行搜索。

在这种情况下,如果您真的关心性能,最好在目标平台和实际工作负载下对这两种解决方案进行基准测试,看看哪种解决方案表现更好。

答案 1 :(得分:1)

realloc = Alloc然后复制然后免费 另一个解决方案是分配和免费只是肯定更快

答案 2 :(得分:0)

我会继续并相信realloc实现做正确的事情。同样在将来你不应该担心内存是否被移动,重新分配等等。这种抢先优化是不必要的,因为大部分时间都花费在从用户空间到内核空间的上下文切换中。