【问题标题】:Shrink factor for dynamic array?动态数组的收缩系数?
【发布时间】:2020-07-04 17:58:04
【问题描述】:

动态数组的增长因子通常为 3/2 到 2。但是一旦分配了内存,它就永远不会自动收缩。有一个衰减因子生长因子大两倍是否合适?我的意思是如果元素的数量比衰减因子小 N 倍,那么数组会被重新分配 (realloc) 并且尺寸更小?

我发现了大量关于动态数组增长的信息,但没有关于相反操作的信息。

【问题讨论】:

  • 只需从 C++ std::vector 借一个页面,并具有显式缩小以适应和保留功能。

标签: c arrays dynamic-memory-allocation


【解决方案1】:

要使衰减因子有意义,您需要期望您的数组

  • 用很少的元素长时间运行

  • 在需要更多、更多内存的地方突发

  • 以及其他在数组很大时不需要内存的数据结构。

通常情况并非如此。通常的情况是以下任何一种:

  • 数组增长一次,使用一次,丢弃。

  • 数组寿命长,并且经常改变它的长度。

  • 阵列寿命长,通常根本不会增长/收缩。

在所有这些情况下,引入收缩因子将是纯粹的开销。这就是为什么这些收缩因素通常不被打扰的原因。特别是因为收缩因素有可能破坏指数增长分配的 O(N) 聚合添加时间行为。

【讨论】:

  • 并且应用程序必须足够聪明才能知道何时调用压缩/收缩函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2012-08-24
  • 2014-12-17
  • 2019-02-06
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多