使用 EXTERNAL 工作存储变量是否会影响性能

Is there a performance hit for using EXTERNAL working storage variables

这个问题是关于 IBM Enterprise COBOL 4.2 的。

我有一个程序需要更改和增加工作存储缓冲区。不幸的是,这种缓冲区大小的增加使我超过了工作存储部分的 128M 最大值。我的计划是采用一些较大的 01 变量并将它们设为 EXTERNAL,但我担心这会影响系统性能。

有谁知道在外部创建工作存储变量是否会降低系统性能?

我被告知大约一年后我们将切换到 COBOL 6.1,因此如果性能下降很小,我们应该能够处理它直到我们获得 6.1(工作存储限制已经增加到2G)

首先,如果您使用了最大 WORKING-STORAGE (128 Mb) 并且需要更多,则必须使用 EXTERNAL space。不管它是否影响性能,无论如何你都需要它。它可能会降低您的性能(因为编译器需要加载更多数据),但延迟可以忽略不计。

其次,使用 OPTIMIZE(FULL) 选项编译您的程序,这将列出您程序中所有未使用的变量(我打赌您会找到一些)。这可以节省一些 space 并且代码更简洁。

希望对您有所帮助。

作为一个实际问题,使用EXTERNAL与系统调用带有每个外部数据项的程序没有什么不同,就好像它是一个链接部分数据项一样。我建议编译一个小程序并检查生成的代码,看看有什么不同。

working-storage section.
01 ws-data pic x(8).
01 ext-data pic x(8) external.
linkage section.
01 ls-data pic x(8).
procedure division using ls-data.
begin.
    move spaces to ws-data
    move spaces tp ext-data
    move spaces to ls-data
    goback
    .

我怀疑访问 ext-datals-data 之间没有区别。

这将提供有关 "hit" 预期的具体信息。

在定位 EXTERNAL 数据项时涉及额外的检查(和名称查找)。当程序启动时,每个程序中定义的每个 01 级 EXTERNAL 数据项都会执行一次此处理。 EXTERNAL 数据项也有额外的内存管理开销(与工作存储定义的数据项相比。)