9

目前我有一个TCube数组

CreateCube : array[1..1000] of tcube;

目前将它们用作地图,因此您可能有 30 个立方体宽、20 个立方体高,从而形成一个大网格。但是 1000 个立方体并不足以满足我的需要,我需要更像 10,000 个立方体。

拥有这么大的数组会不会导致问题发生?还有其他选择吗?

4

3 回答 3

16

大型数组存在问题的主要情况有两种:

  1. 该数组太大以至于无法放入连续的内存块中。如果数组包含引用而不是值,那么您可能有足够的内存用于数组,但内存不足用于引用的对象。
  2. 该数组被声明为局部变量并导致堆栈溢出。避免该问题的方法是将数组移动到堆上。在 Delphi 中,最简洁的方法是使数组成为动态数组。即使您在编译时知道维度,也可以使用动态数组将存储从堆栈移到堆上。
于 2013-07-30T09:22:59.943 回答
5

数组可以与内存允许的一样大。但是如果它是一个局部变量,或者如果你通过将它传递给某个方法,那么要小心,你很容易出栈。

于 2013-07-30T09:23:37.557 回答
2

选择正确的数据结构是我只能建议您的事情。其中大部分将取决于阵列的填充程度。如果数组很大但人口稀少,稀疏数组可能会很好用。

就个人而言,我会编写一个自定义列表类来包含 TCube 实例。与数组相比,这有几个优点。首先,它会动态消耗内存。其次,您可以向此类添加其他方法以适合您的应用程序。

于 2013-07-30T09:36:59.987 回答