听起来你的主要关注点是:如果在运行时大小发生变化,编译器如何知道在数组中分配多少?
答案是它分配了最大的空间量(足够90个条目).请注意,这是用于工作存储空间.将记录写入文件时,仅写入相关部分.
一个例子:
01 TABLE-SIZE PIC 9
01 TABLE OCCURS 1 TO 9 TIMES DEPENDING ON TABLE-SIZE
03 FLD1 PIC X(4)
Run Code Online (Sandbox Code Playgroud)
这将为TABLE工作存储分配36个字符(9乘以4).如果TABLE-SIZE将记录写入文件时设置为2 ,则只写入8个字符TABLE(TABLE-SIZE当然,在写入的字符之上和之上).
因此,例如,如果占用的内存TABLE是AaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii,写入文件的日期可能会缩短(包括大小)2AaaaBbbb.
类似地,当读回记录时,将从文件中填充两者TABLE-SIZE和相关位TABLE(仅设置大小和前两个元素).
当发生这种情况时,我不相信未使用的TABLE条目被初始化为任何东西.不管怎样,最好不要假设,如果你需要在表格中添加另一个项目,请明确填充它们.
为了提高效率,您可能需要考虑设置TABLE-SIZE为USAGE IS COMP.