为什么要使用固定长度数组而不是可变长度数据结构来实现堆栈?

Why would one implement a stack using a fixed length array instead of a variable length data structure?

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

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

可以根据您的编程语言提供更多信息,但通常优势是速度。通过使用固定大小,保留内存块的大小不再需要随着任何更改而混乱。你的内存可能会变得碎片化(所以你的数据一点点在这里,一点点在那里,每次你改变数组时,情况都会变得更糟。)所以使用固定大小会将所有数据保存在一个地方。

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

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

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

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