用于存储大数据的动态数据结构数组

Dynamic datastructure array for storing large data

我在 ITJungle 上读了一篇关于 Dynamically Sized Arrays 的文章,想知道这是否不是 "making easy thing much more complex" 的事情。

据我了解,如果我定义一个静态变量(包括数组),运行时会在 RUNTIME 处保留所需的 space。因此,当定义一个 CHAR(10) DIM(10) 的数组时,整个 space 将在启动程序时被保留。

所以正如文章所说,如果我想要一个动态递增的数组,它可以像 C# 中的 List<String> 一样调整自身大小以适应数据,我必须创建一个 CHAR(10) DIM(10)。然后我必须重新分配新的 space 只有在需要的时候?

为什么? space 已被保留。当只需要即 80 个字节时,为什么有人必须在指针上建立一个(比方说)100 个字节大小的数组?

我是不是漏掉了什么?用于调整数组大小的 "init-value" 是否只是为了让编译器平静下来,所以我不会收到 "compiler doesn't know the size at compile time"?

的错误

对于普通数组,space 是正确的,一旦达到特定的数组范围,就会在运行时分配(全局程序的开始,子过程的子过程的开始)。

但是,您会注意到数据结构是用 based(pInfo) 声明的。 based 是导致内存未分配的关键字。相反,它会假设数据结构的所有内存(包括数组成员)已经分配在传递给 based 关键字(在本例中为 pInfo)的指针指定的位置。

实际上,一旦您使用 based 关键字,您只是告诉编译器您希望如何使用指定指针处的内存,但实际管理该内存取决于您。

综上所述,如果我正确理解了你的问题,那么你关于"knowing the size at compile time"的说法是正确的。 RPG 不支持 pointer/array 对偶性或像某些语言那样的类似数组的对象,因此您基本上只需要向 RPG 声明您永远不会超出 "init-value" 范围。