在CICS 中,COBOL 的Linkage Section 中的数据存储在哪里?
In CICS where is the data in the Linkage Section of COBOL stored?
在 z/OS 上的 CICS 我有一些问题:
- 主存储器上存储了哪些数据?辅助存储?
- 链接段下的DFHCOMMAREA中的数据存在哪里?它在主存储器上吗?
- 如果我将 DFHCOMMAREA 从一个程序传递到另一个程序,是否会创建额外的数据副本? (按值或按引用传递)
关于不同的存储类型,这里存在相当多的混淆。从 COBOL 的角度来看,您永远不会担心主存储或辅助存储。您的 COBOL 数据位于由虚拟存储组成的地址 space 中,该地址又由系统认为合适的主存储或辅助存储支持。
虽然您的程序会自动为 WORKING STORAGE 或 LOCAL STORAGE 部分中定义的项目分配内存,但它不会为 LINKAGE SECTION 中定义的任何内容分配内存。要使 LINKAGE SECTION 项目可用,需要两件事:
- 必须分配一些内存
- LINKAGE SECTION 项必须与该内存区域的地址相关联。
这两件事可能以不同的方式发生:
- 对于出现在
PROCEDURE DIVISION
的 USING
中的项目,内存由调用程序(或调用堆栈上的其他程序)提供,编译器将项目与传递的相应地址相关联在调用者提供的参数列表中。对于顶级 CICS 程序的 DFHCOMMAREA,分配内存的调用程序是 CICS 本身。
- 您可以“重新映射”您的内存,例如使用
SET ADDRESS OF
将 WORKING STORAGE 连接到 LINKAGE SECTION 项目
- 对于更新的编译器,您还可以使用
ALLOCATE
从您的程序中动态请求内存,当与 LINKAGE SECTION 项目一起使用时,它还会自动将项目与内存相关联
关于你的最后一个问题:将参数 BY REFERENCE
从一个程序传递到另一个程序不会创建该数据的额外副本。传递 BY VALUE
或 BY CONTENT
将复制数据。
在 z/OS 上的 CICS 我有一些问题:
- 主存储器上存储了哪些数据?辅助存储?
- 链接段下的DFHCOMMAREA中的数据存在哪里?它在主存储器上吗?
- 如果我将 DFHCOMMAREA 从一个程序传递到另一个程序,是否会创建额外的数据副本? (按值或按引用传递)
关于不同的存储类型,这里存在相当多的混淆。从 COBOL 的角度来看,您永远不会担心主存储或辅助存储。您的 COBOL 数据位于由虚拟存储组成的地址 space 中,该地址又由系统认为合适的主存储或辅助存储支持。
虽然您的程序会自动为 WORKING STORAGE 或 LOCAL STORAGE 部分中定义的项目分配内存,但它不会为 LINKAGE SECTION 中定义的任何内容分配内存。要使 LINKAGE SECTION 项目可用,需要两件事:
- 必须分配一些内存
- LINKAGE SECTION 项必须与该内存区域的地址相关联。
这两件事可能以不同的方式发生:
- 对于出现在
PROCEDURE DIVISION
的USING
中的项目,内存由调用程序(或调用堆栈上的其他程序)提供,编译器将项目与传递的相应地址相关联在调用者提供的参数列表中。对于顶级 CICS 程序的 DFHCOMMAREA,分配内存的调用程序是 CICS 本身。 - 您可以“重新映射”您的内存,例如使用
SET ADDRESS OF
将 WORKING STORAGE 连接到 LINKAGE SECTION 项目
- 对于更新的编译器,您还可以使用
ALLOCATE
从您的程序中动态请求内存,当与 LINKAGE SECTION 项目一起使用时,它还会自动将项目与内存相关联
关于你的最后一个问题:将参数 BY REFERENCE
从一个程序传递到另一个程序不会创建该数据的额外副本。传递 BY VALUE
或 BY CONTENT
将复制数据。