arrays - 用于存储大数据的动态数据结构数组
问题描述
我在 ITJungle 上阅读了一篇关于动态大小数组的文章,想知道这是否不是“让简单的事情变得更复杂”的事情。
因此,据我了解,如果我定义一个静态变量(包括数组),运行时会在RUNTIME
. 所以当定义一个数组时CHAR(10) DIM(10)
会在启动程序时保留整个空间。
因此,正如文章所说,如果我想要一个动态增加的数组来调整自身大小以适应List<String>
C# 中的数据,我必须创建一个CHAR(10) DIM(10)
. 然后我必须仅在需要时重新分配新空间?
为什么?空间已经预留。当只需要 80 字节时,为什么有人必须在指针上建立一个(比如说)100 字节大小的数组?
我只是错过了什么吗?用于调整数组大小的“初始化值”是否只是为了让编译器平静下来,这样我就不会收到“编译器在编译时不知道大小”的错误?
解决方案
对于普通数组,只要达到特定数组范围(全局程序开始,子过程开始子过程),空间就会在运行时分配是正确的。
但是,您会注意到数据结构是用based(pInfo)
. based
是导致内存不被分配的关键字。相反,它将假定数据结构的所有内存(包括数组成员)已经分配在传递给based
关键字的指针指定的位置(pInfo
在这种情况下)。
实际上,一旦您使用based
关键字,您只是告诉编译器您希望如何使用指定指针处的内存,但实际管理该内存取决于您。
总之,如果我正确理解您的问题,那么您关于“在编译时知道大小”的陈述是正确的。RPG 不像某些语言那样支持指针/数组二元性或类似数组的对象,因此您基本上只需要向 RPG 声明您永远不会超出“初始值”界限。
推荐阅读
- python - 在 scipy 中将 qmc 作为子模块导入
- tableau-desktop - 总 N 作为小计,同时在表视图中保留总数的百分比?
- amazon-web-services - AWS API Gateway - Step Function 集成,成功时出现 500 错误
- kubernetes - 如何在 Helm 中使用环境/秘密变量?
- javascript - 如何在不重组页面的情况下放大 Chrome 浏览器
- mysql - 我在 MySQL 中有检查约束,但它没有
- python - 在 Python 脚本上导入海量数据
- gstreamer - gstreamer 1.14.4 使用 buildroot 构建错误
- angular - ngx-translate 在用户认证后导入翻译
- jquery - 如何连续使用replaceWith多次