通过将其大小加倍而增长的阵列的平均分配因子是多少?

时间:2013-12-09 21:25:11

标签: arrays list memory-management dynamic-arrays

在.Net中,List<T>类型会自动调整大小,每次内部缓冲区的容量增加一倍。 结果,浪费了一些内存。 (我事先不知道项目计数,它是随机的,并且在添加所有项目后我无法手动调整大小。)

我们可以通过“加倍”分配策略告诉平均浪费了多少内存?


这是我寻找答案的尝试。我just read a blog断言容量最终平均为实际最终所需缓冲区大小的1.5倍,但没有解释。我认为推理是这样的:

  • 有2 ^ n项,没有过度分配:f = 1
  • 与(2 ^ n)+1项,存在近似f = 2
  • 的位置

所以平均来说,它会跟随分配因子是f = 1.5 ......但是很明显,下限和上限是f = 1和f = 2,我不相信它遵循1.5是正确的平均值。 我的感觉是,每个2的幂之间实际大小的分布不一致。如果我们使用Pareto分布,它真的是1.5吗?我上次上几节课以来已经很久了,我说不出来......


This question是相关的,但只涉及增长率,而不是浪费的内存量。

0 个答案:

没有答案