次に、条件分岐(if文)の個所は真になることがないことが確定していますので、この個所はデッドコードとして削除されます。12;}と最適化されることになります(※コンパイラにより、また最適化レベルによっても挙動が異なります)他にも、頻繁に使われる変数をレジスタに割り当て高速にアクセスできるようにしたり、ループ回数が同じである複数のループをまとめることでオーバーヘッドを少なくするなど、さまざまな最適化があります。ZeroMemoryマクロの最適化による不具合は有名ですよね。メモリからパスワードを消去ZeroMemory(password,0);}このコードは一見問題なさそうに見えますが、リリースビルドなどでコンパイラの最適化を施すと、ZeroMemoryはコールされないケースが起こり得ます。最適化では、それ以下のコードでメモリを参照していない変数への代入などの処理を省くように作られているケースが多く、上記の場合ではZeroMemoryをコールしている箇所以下では変数passwordが参照されていないため、ZeroMemoryを呼ぶ必要がないと判断されるのです。結果、スタックにパスワードが残ることになり、セキュリティホールを招くような事態になる恐れがありますこれを防ぐためには、上記の例ではZeroMemoryの代わりにSecureZeroMemoryマクロを利用したり、ゼロクリアした後に、変数passwwordを参照するコードを書くなどの解決策が挙げられるでしょう。volatile修飾子を利用して、最適化を防ぐ方法もあります。[必須入力]※画像の中の文字を半角で入力してください。※ブログオーナーが承認したコメントのみ表示されます。31最近の記事(12/04)ヘキサドライブ日記、お引越しのお知らせ(11/28)手軽に作詞作曲を。