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

时间:2018-11-30 09:59:40

标签: arrays dynamic ibm-midrange dynamic-memory-allocation rpgle

我读了一篇有关ITJungle的关于Dynamically Sized Arrays的文章,想知道这是否不是“使简单的事情变得更加复杂”。

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

因此,如文章所述,如果我想拥有一个动态增加的数组,该数组可以自动调整大小以适合数据,例如C#中的List<String>,那么我必须创建一个CHAR(10) DIM(10)。然后,仅在需要时我才必须重新分配新空间?

为什么?该空间已被保留。当仅需要80个字节的情况下,有人需要在指针上建立一个(大小为100个字节)数组的原因是什么?

我只是想念一些东西吗?用于调整数组大小的“初始值”是否只是为了使编译器平静下来,这样我就不会收到“编译器在编译时不知道大小”的错误提示?

1 个答案:

答案 0 :(得分:3)

对于普通数组,您是正确的,即一旦达到特定数组范围(在程序中启动全局变量,在子过程中启动子过程),就会在运行时分配空间。

但是,您会注意到数据结构是用based(pInfo)声明的。 based是将导致不分配内存的关键字。取而代之的是,假定数据结构(包括数组成员)的所有内存已经分配到了传递给based关键字的指针所指定的位置(在这种情况下为pInfo)。

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

总而言之,如果我能正确理解您的问题,那么您所做的关于“在编译时知道大小”的陈述是正确的。 RPG不像某些语言一样支持指针/数组对偶或类似数组的对象,因此您基本上只需要向RPG声明您永远都不会超出“初始值”的范围。