可变长度表中的内存分配

Jos*_*ola 4 cobol

假设我在WORKING-STORAGE... 中定义了以下可变长度表

01  SOAP-RECORD.                                           
    05  SOAP-INPUT        PIC X(8)          VALUE SPACES.
    05  SOAP-STATUS       PIC 9             VALUE ZERO.                         
    05  SOAP-MESSAGE      PIC X(50)         VALUE SPACES.
    05  SOAP-ITEMS        OCCURS 0 TO 500 TIMES   
                          DEPENDING ON ITEM-COUNT
                          INDEXED BY ITEM-X.     
        10 SI-SUB-ITEMS   OCCURS 0 TO 100 TIMES
                          DEPENDING ON SUB-COUNT
                          INDEXED BY SUB-X.     
           15 SS-KEY      PIC X(8)          VALUE SPACES.
           15 SS-AMOUNT   PIC -9(7).99      VALUE ZEROS.
           15 SS-DESCR    PIC x(100)        VALUE SPACES.
Run Code Online (Sandbox Code Playgroud)

当这个程序运行时,它最初会分配这个表可能需要的空间,还是分配内存更动态?我猜这个DEPENDING ON子句会使它更具动态性,因为它会随着ITEM-COUNT变量的增加而分配更多的内存.一位同事告诉我,但他不是百分百肯定.所以我真的想知道这是如何工作的,以便尽可能有效地构建我的程序.

PS:是的,我正在写一个新的COBOL程序!它实际上是一个CICS Web服务.我认为这种语言永远不会死:(

小智 6

您没有提到您正在使用的编译器,但是,至少通过当前的2002 COBOL标准,为OCCURS分配的空间...依赖于(ODO)数据项不需要是动态的.(实际上只是数据项的出现次数而不是长度变化.)虽然您的编译器供应商可能已经实现了标准的扩展,但我不知道任何供应商在此领域已经这样做了.

下一个但尚未批准的标准修订包括支持具有新OCCURS DYNAMIC格式的动态容量表.