我正在使用动态数组来表示最小堆。有一个循环删除最小值,并将随机元素添加到最小堆,直到某些条件发生。虽然我不知道堆的长度在运行时会如何变化(有很多随机性),但我知道上限,即 1000 万。我有两个选择:
1)使用 malloc 声明一个小数组,然后在堆中的元素数量超过长度时调用 realloc。
2)使用malloc声明一个1000万条目数组。这避免了调用 realloc。
问题
选项 2 是否比选项 1 更有效?
我用我的代码对此进行了测试,使用 2 似乎显着减少了 (20%) 运行时间。这是由于代码中的随机性而估计的。用 malloc 预先声明一个 10-5000 万的大型条目数组有什么缺点吗?