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

问题描述 投票:2回答:3

在阅读有关enhancements made with COBOL V6.1的文章时,我发现了这一信息 - “在所有情况下都将从HEAP存储中获取工作存储,因此(几乎)STORAGE(xx)运行时选项将影响WORKING-STORAGE时几乎没有例外。 ”。

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

cobol mainframe
3个回答
3
投票

以下是IBM针对COBOL 6.1的STORAGE(XX)参考文档。

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

使用STORAGE的性能注意事项:

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

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

平均而言,STORAGE(NONE,00,NONE)相当于STORAGE(NONE,NONE,NONE)。一个RENT程序在PROGRAM-ID语句中使用IS INITIAL调用一个RENT子程序,其工作存储速度为40 MB,速度慢了9%。

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


3
投票

STORAGE是一个语言环境运行时选项

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

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

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

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


2
投票

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

此外,STORAGE()运行时选项不负责存储量。 LE实际上没有一个选项可以控制您获得的存储量,只有在被分配出来以满足程序请求之前获取存储的增量。

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

© www.soinside.com 2019 - 2024. All rights reserved.