优化
使用 OPTIMIZE 可减少对象程序的运行时间。 优化还可能减少对象程序使用的存储量。 执行的优化包括传播常量,指令调度 和消除从不使用其结果的计算。
缺省值为: NOOPTIMIZE
缩写为: OPT | NOOPT
如果指定了 OPTIMIZE 而没有任何子选项,那么 OPTIMIZE(STD) 将生效。
FULL 子选项请求除了使用 OPT(STD)执行的优化之外,编译器还会废弃 DATA
DIVISION 中未引用的数据项,并禁止生成代码以将这些数据项初始化为其 VALUE 子句中的值。 当 OPT(FULL) 生效时,将废弃所有未引用的 level-77 项和基本 level-01 项。 此外,如果未引用 level-01 组项的任何下级项,那么将废弃这些组项。 已删除的项将显示在列表中。 如果 MAP 选项有效,那么数据映射信息中的 BL number of XXXXX 指示已废弃数据项。
建议: 将 OPTIMIZE(FULL) 用于数据库应用程序。 它可以显着提高性能,因为将消除关联的 COPY 语句中包含的未使用的常量。 但是,如果数据库应用程序依赖于未使用的数据项,请参阅以下建议。
未使用的数据项: 如果程序依赖于使用未使用的数据项,请勿使用 OPT(FULL) 。 在过去,这通常是通过两种方式完成的:
- 在旧的 OS/VS COBOL 程序中,有时会使用一种技术,将一个未引用表放在一个引用表之后,然后使用第一个表中超出范围的下标来访问第二个表。 要确定程序是否使用此方法,请将
SSRANGE编译器选项 与CHECK(ON)运行时选项配合使用。 要解决这个问题,可以利用 COBOL 的新功能对大型表格进行编码,并只使用一个表格。 - 将醒目的数据项放在
WORKING-STORAGE SECTION中,以标识程序数据的开始和结束,或者为使用该数据来标识程序版本的库工具标记程序副本。 要解决此问题,请使用PROCEDURE DIVISION语句而不是VALUE子句来初始化这些项。 使用此方法,编译器将考虑使用的这些项,并且不会将其删除。
如果发生严重级别的错误或更高级别的错误,那么将关闭 OPTIMIZE 选项。
