1

我有一块内存,我想重新分配到不同的大小,但我不在乎内存是否被丢弃。free() 内存然后 malloc() 一个新的内存块会更快,还是 realloc() 是要走的路?

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

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

谢谢!:)

4

3 回答 3

2

如果你不关心内容,标准的成语是 dofree后跟malloc. 找到一个块比复制它便宜,并且不能保证它realloc不会自己进行一些搜索。

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

于 2012-11-10T20:11:08.580 回答
1

realloc = Alloc 然后复制然后释放另一个解决方案是 alloc 和 free 肯定更快

于 2012-11-10T20:48:25.247 回答
0

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

于 2012-11-10T20:16:40.027 回答