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

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

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

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

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

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

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

最佳答案

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

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

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

总之,如果我正确理解你的问题,你关于“在编译时了解大小”的说法是正确的。 RPG 不支持指针/数组二元性或类似数组的对象(如某些语言),因此您本质上只需向 RPG 声明您永远不会超出“初始值”范围。

关于arrays - 用于存储大数据的动态数据结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53555191/

相关文章:

python - 将 MATLAB 转换为 Python : too many indices return error

javascript - 数组拼接 - Javascript

c# - 从另外两个创建动态表达式 lambda(链接表达式)

c++ - C++ 中没有指针的动态内存分配——指针有什么意义?

DB2 400 删除列

insert - 插入时 DB2 重复键错误,但在选择计数(*)后工作

c# - 如何在二维数组中应用二分查找?

c++ - 如果用户越界,我想忽略他们的输入

parameters - 仅在 DB2 中参数化 FETCH FIRST n ROWS

php - 使用 PHP 的动态导航包括