realloc调用会引入多少开销?

sab*_*ber 8 c c++ memory memory-management realloc

realloc在循环的每次迭代中使用,迭代次数for超过10000次.

这是一个好习惯吗?realloc如果被调用很多次会导致错误吗?

Ale*_*ler 13

它不会失败,除非你的内存不足(任何其他分配器都会发生这种情况) - 但如果你设法预先估算所需的存储空间,你的代码通常运行得更快.

通常,最好只执行额外的循环运行以确定存储要求.

我不会说那realloc是不行,但这也不是好事.

  • 即使没有额外的循环,您也可以通过经验法则减少重新分配的次数,例如增加分配的内存量作为总大小的因素,而不是一次只有一个对象(例如,您可以从100个对象,当它已满时添加另外50%(使总数达到150),然后另外50%(到225),另一个(到338)等等... (3认同)
  • 如果您可以运行额外的循环来确定存储,那么最好这样做。但在许多情况下,这实际上是不可能的,因为您需要在每件物品到达时一劳永逸地处理它。 (2认同)

ffh*_*dad 8

我最近偶然发现了这个问题,虽然它已经很老了,但我觉得这些信息并不完全准确.

关于预先确定需要多少字节内存的额外循环,

使用额外的循环并不总是或甚至更好.预先确定需要多少内存需要什么?这可能会导致额外的I/O,这是非常昂贵且不需要的.

关于一般使用realloc,

alloc函数系列(malloc,calloc,realloc和free)非常有效.底层alloc系统从OS分配一个大块,然后根据请求将部分传递给用户.对realloc的连续调用几乎肯定只会增加当前内存位置的额外空间.

如果系统从一开始就为您提供更有效和正确的帮助,您就不希望自己维护堆池.