REDUCE オプションを指定した場合、コンパイラーは、埋め込みバイトを 上書きすることになる場合でも、構造体へのヌル・ストリングの代入を より少なく単純な操作に軽減することができます。
REDUCE オプションを使用すると、ヌル・ストリングを構造体に 割り当てるために生成されるコードの行数が少なくなり、 その結果として通常はコンパイルが高速になり、コードの実行速度が大きく向上します。しかし、埋め込みバイトはゼロにリセットされることがあります。
例えば次の構造体では、field11 と field12 の間に 1 バイトの埋め込み があります。
dcl 1 sample ext, 5 field10 bin fixed(31), 5 field11 dec fixed(13), 5 field12 bin fixed(31), 5 field13 bin fixed(31), 5 field14 bit(32), 5 field15 bin fixed(31), 5 field16 bit(32), 5 field17 bin fixed(31);
ここで、代入 sample = ''; について考えてみましょう。
NOREDUCE オプションを指定した場合、8 つの割り当てが生成されますが、埋め込みバイトは変更されません。
しかし、REDUCE を指定した場合には、代入は 3 つの操作に軽減されます。
NOREDUCE を指定した場合、次のようなコードが生成されます。
00004C 5810 3056 00015 | L r1,=A(@CONSTANT_AREA)(,r3,86) 000050 58E0 305A 00015 | L r14,=A(SAMPLE)(,r3,90) 000054 4100 0000 00015 | LA r0,0 000058 D206 E004 1000 00015 | MVC FIELD11(7,r14,4),+CONSTANT_AREA(r1,0) 00005E 5000 E000 00015 | ST r0,<s9:d0:l4>(,r14,0) 000062 5000 E00C 00015 | ST r0,<s9:d12:l4>(,r14,12) 000066 5000 E010 00015 | ST r0,<s9:d16:l4>(,r14,16) 00006A 5000 E014 00015 | ST r0,<s9:d20:l4>(,r14,20) 000072 5000 E018 00015 | ST r0,<s9:d24:l4>(,r14,24) 000076 5000 E01C 00015 | ST r0,<s9:d28:l4>(,r14,28) 00007A 5000 E020 00015 | ST r0,<s9:d32:l4>(,r14,32)
しかし、REDUCE を指定すると、次のようなコードが生成されます。
00004C 5810 3042 00015 | L r1,=A(SAMPLE)(,r3,66) 000050 58E0 3046 00000 | L r14,=A(@CONSTANT_AREA)(,r3,70) 000054 D703 1000 1000 00015 | XC _shadow1(4,r1,0),_shadow1(r1,0) 00005A D206 1004 E000 00015 | MVC _shadow1(7,r1,4),+CONSTANT_AREA(r14,0) 000060 D717 100C 100C 00015 | XC _shadow1(24,r1,12),_shadow1(r1,12)
そのため、最も良いパフォーマンスを得るには、REDUCE コンパイラー・オプションを使用してください。