在阅读enhancements made with COBOL V6.1时,我遇到了以下信息-“在所有情况下,都会从HEAP存储中获取WORKING-STORAGE,因此(几乎)对于STORAGE(xx)运行时没有例外选项将影响“工作存储”。”。
STORAGE(XX)运行时将如何影响WORKING-STORAGE?
答案 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子句重新应用于具有它们的项,它不会释放并重新分配工作存储。