阵列太大了吗?

时间:2013-07-30 09:19:43

标签: delphi delphi-xe2 firemonkey

目前我有一个TCube数组

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

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

这个尺寸的阵列是否会引发问题?还有其他选择吗?

3 个答案:

答案 0 :(得分:16)

大型数组有两个主要方案存在问题:

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

答案 1 :(得分:5)

数组可以与内存允许的一样大。但是如果它是一个局部变量,或者你将按值传递给某个方法,那么请注意,你可以轻松地从堆栈中删除。

答案 2 :(得分:2)

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

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