Z / OS中COBOL嵌套程序与子程序之间有什么区别

时间:2018-04-07 18:41:31

标签: zos cics cobol85

在COBOL中,您可以将子例程作为嵌套程序或作为独立模块包含在内。我想知道两种方法在执行速度,内存使用情况以及CICS中是否允许这两种方法之间存在哪些差异。任何参考都会很棒。运行环境是Z / OS。

感谢。

2 个答案:

答案 0 :(得分:3)

CICS中允许使用这两种方法。

内存使用量的差异(如果有的话)可以忽略不计。编译器将生成可重入代码,因此您的工作存储将在每次CICS事务的第一次执行时动态分配,并且每次执行时动态分配您的本地存储。语言环境内存分配算法旨在快速。 CICS区域中只存在一个可执行代码副本。

将子程序打包为嵌套程序或在绑定时将模块静态链接在一起可以避免在调用子程序时LOAD的开销。

将子程序打包为嵌套程序会阻止其他程序调用它,除非将嵌套程序打包为副本并使用COPY编译器指令将其带入程序。这种技术可能导致一些有趣的问题,例如对嵌套程序字帖的更改可能需要使用副本重新编译所有程序才能获取新版本;但这取决于您的源代码管理系统。子程序的静态链接也有类似的问题。

如果将子例程打包为单独的模块,则可以选择通过EXEC CICS LINK或COBOL动态CALL执行它。前者导致创建新的语言环境,因此后者更有效,特别是在第二个及后续CALL上,如果指定语言环境运行时选项CBLPSHPOP(OFF)。

多年来,大部分内容都是从SHARE的演讲中收集而来的。

2002年S8213TR.PDF的SHARE演示中提供了一些调整信息,目前可用here(信息仍然有效)。请注意,与存储分配相关的语言环境运行时选项有许多调整机会。 There exist a number of different mechanisms to set Language Environment options。您的CICS系统程序员可能对此事有意见。可能存在有关语言环境运行时选项的商店标准。

一般来说,大型机CICS COBOL应用程序调优与使用高效算法,变量定义,编译选项和语言环境运行时选项有关,而不是与应用程序打包有关。

答案 1 :(得分:1)

除了cschneid提到的内容...

所包含的程序可以引用所包含程序的数据部门中使用GLOBAL属性声明的项目。所包含的程序无需声明GLOBAL项即可引用它们。

不能使用RECURSIVE属性声明包含的程序。