4bitにっき

ぽよ

【STLとコードの最適化】競技趣味グラマの落ちた罠

CodeVSのAIを作っていた時にとても重要なことに気付いたので、記事として書き残しておきます。

※VisualStudioについての記事です

 

 

何が起きたのか

priority_queueを使っていた時のことです。

計算量は余裕だと思いながら普通にビルド・実行をしたんですが、不思議なことに実行すると3~5秒もかかってしまいました。

いつも通りバグだろうと思ってデバッグをしていたら、あることを思い出しました。

Cup(AOJ0503)をstackを使って解いていた時に、コンパイルオプションでコードの最適化がされているかどうかによって実行速度が大幅に変わるという現象を体験したことがありました。

もしかして今回もコードの最適化をすれば直るのではないかと思いました。

 

解決策

最初VSのコンパイルオプションを見ると最適化が既にされていたので、あれ?と思ったのですが、ググったら色々情報が出てきました。

結論としては、

VisualStudioではビルドする時にDebugモードとReleaseモードがあるが、Debugモードではコードの最適化がされない

ということでした。

つまり解決策としては

最適化をしたい時はReleaseモードでビルド・実行すればよい(ビルド→構成マネージャー→アクティブ ソリューション構成)

です。

Debugモードで最適化ができなくなってるのは、デバッグ機能(F5で使えるやつ?)のためらしいです。

タイトルにSTLと入れてはいますが正直どういう条件で最適化に頼らなければいけなくなるのかはよく分かりません

しかしとりあえず、コンテナ系のSTLを使う時には気をつけるようにしようと思います(今までstackとpriority_queueで起こったので)。

 

 

では眠いのでこれで終わろうと思います。

明日から冬休みなのでコーディングし放題です!!