与性能相关的编译器选项
在下表中,您可以看到每个选项的用途描述,其性能优点和缺点以及适用的用法说明。
| 编译器选项 | 用途 | 性能优势 | 性能劣势 | 用法说明 |
|---|---|---|---|---|
ARITH(EXTEND) 或 ARITH(FULL)(见 ARITH ) |
增加十进制数允许的最大位数 | 无 | 由于中间结果较大, ARITH(EXTEND) 或 ARITH(FULL) 会导致所有十进制数据类型的性能下降。 |
您迂到的降级量直接取决于您使用的十进制数据量。 |
DYNAM(参见 “动态” ) |
在运行时动态装入子程序 (通过 CALL 语句调用) |
子程序更易于维护,因为如果更改了子程序,那么不必再次对应用程序进行链接编辑。 | 存在轻微的性能损失,因为调用必须经过 library 例程。 | 要释放不再需要的虚拟存储器,请发出 CANCEL 语句。 |
OPTIMIZE(STD)(见优化 ) |
优化生成的代码以提高性能 | 通常会生成更高效的运行时代码 | 更长的编译时间: OPTIMIZE 需要比 NOOPTIMIZE更多的编译处理时间。 |
当需要频繁编译时,通常在程序开发期间使用 NOOPTIMIZE ; 它还允许进行符号调试。 对于生产运行,建议使用 OPTIMIZE 。 |
OPTIMIZE(FULL) |
优化生成的代码以提高性能,同时优化 DATA DIVISION |
通常会导致更高效的运行时代码和更少的存储使用量 | 更长的编译时间: OPTIMIZE 需要比 NOOPTIMIZE 更多的编译处理时间。 |
OPT(FULL) 将删除未使用的数据项,对于仅用作转储读取标记的时间戳记或数据项,这可能是不需要的。 |
SSRANGE(见 SSRANGE ) |
验证所有表引用和引用修改表达式是否都在正确的界限内 | SSRANGE 生成用于验证表引用的其他代码。 使用 NOSSRANGE 会导致不生成该代码。 |
在指定了 SSRANGE 的情况下,检查有效范围会影响编译器性能。 |
通常,如果您只需要验证表引用几次而不是每次引用,那么对您自己的检查进行编码可能比使用 SSRANGE更快。 您可以使用 CHECK(OFF) 运行时选项在运行时关闭 SSRANGE 。 对于性能敏感的应用程序,建议使用 NOSSRANGE 。 |
NOTEST(见测试 ) |
要避免使用调试器所需的其他对象代码。 | 无 | TEST 显着扩大了对象文件,因为它添加了调试信息。 链接程序时,可以指示链接程序排除调试信息,从而生成与使用 NOTEST编译模块时创建的大小大致相同的可执行文件。 如果包含调试信息,那么可能会出现轻微的性能降级,因为较大的可执行文件需要更长时间才能装入,并且可能会增加页面调度。 |
对于生产运行,建议使用 NOTEST 。 |
TRUNC(OPT)(见 TRUNC ) |
为避免生成代码以截断算术运算的接收字段 | 不生成额外代码,通常会提高性能 | 每当更改 BINARY 数据项时, TRUNC(BIN) 和 TRUNC(STD) 都会生成额外代码。 TRUNC(BIN) 通常是这些选项中最慢的。 |
TRUNC(STD) 符合 85 COBOL 标准 ,但 TRUNC(BIN) 和 TRUNC(OPT) 不符合标准。 对于 TRUNC(OPT),编译器假定数据符合 PICTURE 和 USAGE 规范。 建议尽可能使用 TRUNC(OPT) 。 |