从HEAP分配有关WORKING-STORAGE的COBOL存储问题

时间:2018-09-12 11:00:04

标签: cobol mainframe

在阅读enhancements made with COBOL V6.1时,我遇到了以下信息-“在所有情况下,都会从HEAP存储中获取WORKING-STORAGE,因此(几乎)对于STORAGE(xx)运行时没有例外选项将影响“工作存储”。”。

STORAGE(XX)运行时将如何影响WORKING-STORAGE?

3 个答案:

答案 0 :(得分:3)

这里是IBM提供的关于STORAGE(XX)的参考文档,用于COBOL 6.1。

请参阅文档中的“存储”部分。从性能的角度来看,它会如何影响您,请参见上面的链接,并在此处提供参考。

  

使用STORAGE的性能注意事项:

     

平均而言,   STORAGE(00,00,00)比STORAGE(NONE,NONE,NONE)慢11%,   范围相当于慢133%。一个RENT程序调用一个RENT   子程序在40 MB的PROGRAM-ID语句上使用IS INITIAL   工作存储速度降低了28%。请注意,使用通话密集型   应用程序,降级速度可能会慢200%或更多。

     

平均而言,STORAGE(00,NONE,NONE)等于   存储(无,无,无)。一个RENT程序调用一个RENT子程序   在40 MB的PROGRAM-ID语句上使用IS INITIAL   工作存储速度降低了5%。

     

平均而言,STORAGE(NONE,00,NONE)等于STORAGE(NONE,NONE,NONE)。一   使用IS INITIAL调用RENT子程序的RENT程序   具有40 MB WORKING-STORAGE的PROGRAM-ID语句要慢9%。

     

对于呼叫密集型程序,STORAGE(NONE,NONE,00)可能会降低超过   100%,具体取决于通话次数。

答案 1 :(得分:3)

STORAGE

的语言环境运行时选项
  

在分配和释放时控制存储的初始内容

(摘自“语言环境 定制” SA38-0685-01)

重点是您可以为堆栈和堆存储定义不同的值(或者您可能要求初始化一个而不是另一个),因此,在使用uninitialized(!)WS-variables时,程序的行为可能会有所不同,具体取决于是否WS是从堆栈或堆中获取的。

因此,您引用的句子的重点是,即使在堆栈和堆的STORAGE子选项不同的情况下,COBOL程序的行为也会更加一致。

答案 2 :(得分:2)

从COBOL v6.1开始,工作存储总是从堆中分配,除非它在NORENT程序中,其中工作存储是可执行文件的一部分。 (v5.x分配方案更为复杂,在此不做介绍。)它是在堆栈上分配的本地存储。

此外,STORAGE()运行时选项也不负责存储量。 LE实际上没有选项来控制您获得的存储量,只有在增量存储中的存储增量被打包,以满足程序请求。

我认为前面提到的文档中看似归因于STORAGE(XX)设置的IS INITIAL程序的性能损失实际上并非归因于STORAGE()设置。 IS INITIAL只是将VALUE子句重新应用于具有它们的项,它不会释放并重新分配工作存储。