优化

使用 OPTIMIZE 可减少对象程序的运行时间。 优化还可能减少对象程序使用的存储量。 执行的优化包括传播常量,指令调度 和消除从不使用其结果的计算。

OPTIMIZE 选项语法

读取语法图跳过可视语法图NOOPTIMIZEOPTIMIZE(STDFULL)

缺省值为: 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 选项。

相关概念
优化

相关参考资料  
冲突的编译器选项