デッドコード削除
次のC言語のコード例を見てみよう。
変数bにはreturn文の後に値が代入されているが、これは実行されない。すなわち、コードの実行は逐次的であり、return文が何らかの条件で囲まれているわけでもないので、return文の後のコードは実行不可能(到達不可能)である。ただし、例えばreturn文の後にラベルがあって、どこかから分岐して飛んでくる場合は、その限りではない。
さらに、この代入文を削除すると、bという変数が初期値を代入したとき以外では全く使われないことがわかる。オプティマイザがどこまで積極的に最適化するかにもよるが、変数bは生成されるコードから完全に削除される可能性もある。
関数内で何らかの計算が行われたとしても、その結果がこの関数のスコープ外からアクセス可能な位置に格納されなければ、その計算は無意味である。さらにこの関数は常に同じ値 (96) を返すので、単にその値を返す関数として単純化される可能性もある。
最近のコンパイラはデッドコード削除を行うか否かをオプションで指定でき、場合によってはそのレベルを指定できるものもある。低いレベルでは、実行されないコードのみを削除するだろう。もう少し高いレベルでは、使われない変数のための領域を確保しないことになる。さらに高いレベルでは、意味のないコードや関数を特定して、それらを削除する。