首页 > 解决方案 > 用于存储大数据的动态数据结构数组

问题描述

我在 ITJungle 上阅读了一篇关于动态大小数组的文章,想知道这是否不是“让简单的事情变得更复杂”的事情。

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

因此,正如文章所说,如果我想要一个动态增加的数组来调整自身大小以适应List<String> C# 中的数据,我必须创建一个CHAR(10) DIM(10). 然后我必须仅在需要时重新分配新空间?

为什么?空间已经预留。当只需要 80 字节时,为什么有人必须在指针上建立一个(比如说)100 字节大小的数组?

我只是错过了什么吗?用于调整数组大小的“初始化值”是否只是为了让编译器平静下来,这样我就不会收到“编译器在编译时不知道大小”的错误?

标签: arraysdynamicibm-midrangedynamic-memory-allocationrpgle

解决方案


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

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

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

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


推荐阅读