多次重新分配比一次巨大的内存分配更昂贵吗?

2023-11-30

我使用动态数组来表示最小堆。有一个循环删除最小值,并将随机元素添加到最小堆,直到出现某种条件。虽然我不知道堆的长度在运行时会如何变化(有很多随机性),但我知道上限,即 1000 万。我有两个选择:

1)使用malloc声明一个小数组,然后当堆中的元素数量超过长度时调用realloc。

2)使用 malloc 声明一个 1000 万个条目的数组。这可以避免调用 realloc。

Question

选项 2 比选项 1 更有效吗?

我用我的代码对此进行了测试,使用 2 似乎可以显着减少 (20%) 运行时间。这是由于代码中的随机性而估计的。预先使用 malloc 声明一个包含 10-5000 万个条目的大型数组有什么缺点吗?


如果您可以腾出内存来进行大量的预先分配,并且它可以显着提高性能,那么请务必这样做。

如果你坚持realloc,那么您可能会发现每次将大小加倍而不是增加固定数量可以在性能和高效内存使用之间提供良好的权衡。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多次重新分配比一次巨大的内存分配更昂贵吗? 的相关文章

随机推荐