【问题标题】:Why would one implement a stack using a fixed length array instead of a variable length data structure?为什么要使用固定长度数组而不是可变长度数据结构来实现堆栈?
【发布时间】:2016-02-16 23:41:35
【问题描述】:

我知道如何实现这两者,但是我想知道基于固定长度数组的堆栈的用途。是否存在您永远不希望您的堆栈增长超过 X 的情况?

【问题讨论】:

  • 任何特定的编程语言?
  • 不,我在阅读堆栈时遇到了这个问题,但在网上找不到任何对此有用的答案。
  • 我有点困惑,这被否决了,有人解释一下吗?

标签: arrays data-structures stack fixed


【解决方案1】:

如果您可以选择,通常您会这样做以加快速度。

可能会提供更多信息,具体取决于您的编程语言,但通常优势是速度。通过使用固定大小,保留内存块的大小不再需要因任何更改而混乱。您的内存可能会变得支离破碎(因此您的一点点数据在这里,一点点在那里,每次更改数组时,情况都会变得更糟。)因此使用固定大小会将其全部保存在一个地方。

许多语言都有垃圾收集例程,例如 Javascript,如果您要创建像视频游戏这样流畅和实时的东西,您会希望使用固定大小,因为这样它就不会每隔几秒就停止集合开始了。在 Javascript 的情况下,您还可以获得静态类型数组的优势,这意味着虚拟机不再需要推断变量是什么类型并检查是否需要转换。

例如,如果您使用 C 或 C++ 进行编程,从文件读取(即加载图像)的典型过程是检查您将要加载到内存中的文件的大小,然后准确地动态分配您需要的内存大小。

推荐阅读:Cost of array operations in Javascript.这个会教你内存碎片和垃圾回收。此处获得的见解适用于许多其他语言。 (例如 Node、PHP、ActionScript、Ruby 等)

【讨论】:

    【解决方案2】:

    其中一个可能是滚动队列或环形缓冲区,这意味着最多记录最后 N 个数据点。这对于记录移动平均值很有用,例如过去 N 秒的平均延迟。重复使用相同的数组元素并仅移动开始和结束位置可以减少垃圾收集,而不是删除结束元素。

    【讨论】:

    • 谢谢,这也很高兴知道,@NextLocal 更详细一点。
    猜你喜欢
    • 2011-12-19
    • 2016-01-06
    • 1970-01-01
    • 2010-09-21
    • 2023-03-04
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多