ページの先頭です。
ここから本文です。

よくあるご質問(サポートFAQ)

【HP ANSI C++/C】最適化のコンパイルオプション

質問内容

ビルドする際に最適化オプション-O2を使用したいのですが、最適化する事で想定外の動作となる可能性があるとの情報を入手しました。どのような場合に想定外の動作となるのでしょうか?

回答内容

最適化処理では、コード上無駄な処理と思われる部分を省略するようにコンパイルします。例えば、以下のようにループ処理の条件としてフラグを定義し、初期値のみ与え、ループ内ではその値を変更しないとします。

bflag = true;
while(bflag) {
. . .
}

bflagの値が変更されないため、最適化処理では例えば以下のようなコードに省略します。

while(1) {
. . .
}

もしこのコードがシングルスレッド上で実行され、変数の値が外部要素によって影響されないのであれば、最適化処理を行なっていないコードと同じ実行結果となり問題は発生しませんが、マルチスレッドやハードウェアなど外部要素によりフラグの値が変更されるケースでは想定外の動きになる可能性があります。

こういう外部要素によって想定外の動きが発生する可能性のある変数(この例ではbflag)に対して、宣言時に volatile 修飾子を付与すればその変数に関する最適化処理を抑止することができます。

【確認済みのバージョン】C.11.31.06
【確認済みの対象OS】HP-UX IPF 11iv3
【カテゴリー】開発/設計(性能チューニング)

製品名カテゴリ

HP ANSI C++/C

  • コンテンツID: 3150105975
  • 公開日: 2013年09月27日
  • 最終更新日:2013年09月27日

アンケート

サポート情報充実のためアンケートにご協力をお願いいたします。



コメント欄:
ここからページ共通メニューです。 ページ共通メニューを読み飛ばす。