我有一块内存,我想重新分配到不同的大小,但我不在乎内存是否被丢弃。释放()内存然后malloc()一个新的内存块,或者realloc()是否可以更快?
我认为任何一种解决方案都不是最佳的,因为需要执行额外的工作。我认为realloc()在定位足够大的内存块方面更快,因为当前片段可能大或小到足以容纳新的内存块。但是,如果片段不够大,它必须复制malloc()没有的内存。
我正在使用Linux。对此可能有一个特殊的功能吗?
谢谢! :)
答案 0 :(得分:2)
如果您不关心内容,标准惯用法是free
后跟malloc
。查找块比复制块便宜,并且无法保证realloc
不会自行搜索。
在这种情况下,如果您真的关心性能,最好在目标平台和实际工作负载下对这两种解决方案进行基准测试,看看哪种解决方案表现更好。
答案 1 :(得分:1)
realloc = Alloc然后复制然后免费 另一个解决方案是分配和免费只是肯定更快
答案 2 :(得分:0)
我会继续并相信realloc实现做正确的事情。同样在将来你不应该担心内存是否被移动,重新分配等等。这种抢先优化是不必要的,因为大部分时间都花费在从用户空间到内核空间的上下文切换中。