カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10811009
FAQカテゴリ(大) コンパイラ
最終更新日 2016-06-29

質問内容

最適化をオンにしたらプログラムが動かなくなりました

回答内容

■最適化の変化により発生する問題について

最適化を行ってプログラムが正しく動かなくなる原因には、以下のようなものが考えられます。

1. 実行速度の変化

プログラムの動作条件に実行速度依存の部分がある場合、最適化により、実行速度が変化によるもの。

 

2. プログラムサイズの変化

プログラムの動作条件にプログラム実装位置に依存する部分がある場合、その条件の変化によるもの。

 

3. C言語の解釈の違い

最適化は、C言語の規格を厳密に解釈するため、プログラマの認識とずれる場合があります。

 

■対策

下記の手順でプログラムの部分を特定し、対策してください。

 

・問題の発生するきっかけとなる最適化内容の特定

(以下の作業を行う前にプロジェクト全体のバックアップをしておいてください。)

最適化には、4段階のレベルと、中、高レベルにおいては、最適化内容を選択することができます。これらは、 

(プロジェクトを開いた状態で)
プロジェクトメニュー > オプション > C/C++コンパイラ > 最適化タブで
レベル なし、低、中、高、レベル中/高の場合は項目

を設定することができます。最初に、問題の発生するレベルを探し、そのレベルが中または高の場合、さらに、項目を順にオン/オフして、特定してください。

 

・問題が発生するプログラムの部分の特定

先に、

プロジェクトメニュー > オプション > C/C++コンパイラ > リストタブ

□リストファイルの出力
□アセンブラニーモニック

にチェックを入れておいてください。

 

EWARMの画面左に見えるファイルの名前を右クリック > オプション
を開き、

□継承した設定をオーバライド

にチェックを入れ、

C/C++コンパイラ > 最適化タブ

で、最適化を元に戻して、問題がなくなるかどうか確認してください。問題がなくならない場合は□継承した設定をオーバライドを元に戻してください。(条件によっては戻さないほうが探しやすい場合もあります)これを繰り返して、関係するソースファイルを探してください。

ソースファイルが特定できましたら、そのファイルのコンパイル結果のわかるリストファイルをエディタで比較し、違う部分を探してください。

 

・ すでにあるコードの場合、最適化のチューニングが済んでいて、特定の最適化条件が指定されている場合がございます。その場合は、その開発者の方に相談されることをお勧めします。

参考資料URL