我读了一篇关于 Dynamically Sized Arrays 的文章在 ITJungle 上,我想知道这是否是一个“让简单的事情变得更加复杂”的事情。
据我所知,如果我定义一个静态变量(包括数组),运行时会在 RUNTIME
处保留所需的空间。 。所以当定义CHAR(10) DIM(10)
的数组时启动程序时,整个空间将被保留。
正如文章所说,如果我想要一个动态增加的数组,它可以调整自身大小以适应数据,例如 List<String>
在 C# 中,我必须创建一个 CHAR(10) DIM(10)
。然后我必须仅在需要时重新分配新空间?
我是不是错过了什么?用于调整数组大小的“init-value”是否只是为了让编译器平静下来,这样我就不会收到“编译器在编译时不知道大小”的错误?
最佳答案
对于普通数组,您是正确的,一旦达到特定数组范围(全局变量的程序开始,子过程的子过程开始),空间就会在运行时分配。
但是,您会注意到数据结构是使用 based(pInfo)
声明的。 based
是导致内存不被分配的关键字。相反,它会假设数据结构(包括数组成员)的所有内存都已分配在传递给 based
关键字(中的 pInfo
)的指针指定的位置。本例)。
实际上,一旦您使用 based
关键字,您只需告诉编译器您希望如何使用指定指针处的内存,但实际管理该内存取决于您。
总之,如果我正确理解你的问题,你关于“在编译时了解大小”的说法是正确的。 RPG 不支持指针/数组二元性或类似数组的对象(如某些语言),因此您本质上只需向 RPG 声明您永远不会超出“初始值”范围。
关于arrays - 用于存储大数据的动态数据结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53555191/