• ベストアンサー

コンパイラの最適化オプションについて

あるプログラムを実行したさいに、コンパイラの最適化オプションをなしにすると、正しく実行できるのですが、最適化オプションをありにするとcoreダンプしてしまいます。 このような場合、プログラムにバグがあると考えるのが妥当だとは思うのですが、コンパイラによっては、このようなことも当然ありうると考えたほうが良いのでしょうか? 識者の方がおられましたら、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

> プログラムにバグがあると考えるのが妥当だとは思うのですが もちろんそのとおりです。 > コンパイラによっては、このようなことも当然ありうると考えたほうが良いのでしょうか 「当然」ではなく、「かなり低い確立で」ありえる話です。 過去の経験として ・沖IF1000のプロトタイプ、SystemV Rel2.x、Jhonson-C(標準のCC) ・DEC VAX11/780、Ultrix(DigitalUnixでは無い)、Jhonson-C ・DEC VAX11/780、VMS複数バージョン、VAX Fortran ・DOS/V、Felx86、Hitec-C ・IBM汎用機複数機種、MVS複数バージョン、最適化COBOL などで明らかにオプティマイザのバグと思われる状況に遭遇し、メーカーに問い合わせたところ「原因不明なので最適化オプションをオフにしてください」という返答をもらいました。 全て10年以上前のコンパイラなので現在ではどうなるかわかりません。 経験していませんが、Visual-C++5.0ではオプティマイザを無限ループさせるソースが存在することが公表されました。

その他の回答 (2)

noname#30727
noname#30727
回答No.3

私も15年くらいの間に、マイナーなコンパイラの吐くおかしなコードにハマった事が3回ほどあります。 疑う比重としては、自分が99でコンパイラが1というところです。 最適化ありにするとトレースが難しくなることが多いので、私は週に数回、絞り込みがしやすくなるように最適化ありで動作テストするようにしています。 先送りしすぎて手遅れになった経験もあるので、最適化には恐怖を感じてます(笑)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> このような場合、プログラムにバグがあると考えるのが妥当だとは思うのですが、コンパイラによっては、このようなことも当然ありうると考えたほうが良いのでしょうか? そらまあ、そうなんですが、よほどレアなコンパイラを使ってない限りではプログラムのバグと 考えてください。 という以上のアドバイスは、質問の文面からは無理でしょう。 これでは、何のアドバイスにもなってませんね (^^; アドバイスにはならないんですが、私の経験を。 C/C++ のコンパイラは、マイナーなものを含めバージョンの差もあわせると、十何年間で 15 種類以上使いました。 そのうち、ベンダーが出している障害情報よりも先に自分で障害を見つけたのは、添付のライブラリの 障害も含めると二種類だけです。 ま、そのくらい少ないという感じ。

関連するQ&A