最適化の制限のサポート

最適化プラグマ

#pragma optimize を使用して、特定の関数のすべての最適化をオフにすることができます。#pragma optimize の有効な 2 番目の引数は次のとおりです。

コンパイラーは、最初の引数の値を無視します。

#pragma optimize("", off) を指定すると、コンパイラーが一致する #pragma optimize("", on) 文を見つけるか、ソースファイルの最後に到達するまで最適化が無効になります。次の例 1 では、alpha() 関数の最適化は無効になりますが、omega() 関数の最適化は無効になりません。

例 1: 1 つの関数の最適化を無効にする

#pragma optimize("", off)
alpha() {
...
}

#pragma optimize("", on)

omega() {

...

}

例 2 では、alpha() 関数と omega() 関数の両方の最適化が無効になります。

例 2: すべての関数の最適化を無効にする

#pragma optimize("", off)
alpha() {
...
}

omega() {

...

}

optimization_level プラグマ

#pragma optimization_level を使用して特定の関数の最適化を制御することができます。このプラグマは、指定された関数の最適化のみに影響を与えます。このプラグマを使用すると、特定の関数の最適化レベルを制限し、残りのアプリケーションでは別の高度な最適化レベルを使用して最適化を行うことができます。例えば、アプリケーションに対して -O3 (Linux*) または /O3 (Windows*) を指定する場合、#pragma optimization_level 1 を指定すると、マークされた関数は -O1 レベル (Linux) または /O1 レベル (Windows) で最適化され、残りのアプリケーションはこれよりも高いレベルで最適化されます。

プラグマの構文を次に示します。

構文

#pragma optimization_level n

n は整数です。有効な値と説明は次のとおりです。

説明

0

-O0 (Linux) または /Od (Windows) と同じ

1

-O1 (Linux) または /O1 (Windows) と同じ

2

-O2 (Linux) または /O2 (Windows) と同じ

3

-O3 (Linux) または /O3 (Windows) と同じ

最適化レベルに関する詳細は、「最適化オプションのまとめ」を参照してください。

次のように、プラグマは関数の直前に配置してください。

#pragma optimization_level 1
gamma() {
...

}

一般に、プラグマは n によって指定されたレベルで関数を最適化しますが、IPO など一部のコンパイラーの最適化は、変換単位のコンパイル時に有効または無効になりません。例えば、IPO と特定の最適化レベルを有効にすると、IPO は optimization_level プラグマのターゲット関数に対しても有効になります。ただし、コマンドラインで指定された最適化レベルに関係なく、完全には有効にされない場合もあります。また、その逆も起こります。