実際の最適化
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:40 UTC 版)
定数畳み込みと定数伝播は同時に行って、かつそれ以上変化が起きなくなるまで繰り返し実施することで、さらに効果が大きくなる。例として次のC言語コードを見てみよう。 int a = 30;int b = 9 - a / 5;int c;c = b * 4;if (c > 10) { c = c - 10;}return c * (60 / a); 定数伝播を一回行い、その後定数畳み込みを施すと、次のようになる。 int a = 30;int b = 3;int c;c = 12;if (c > 10) { c = c - 10;}return c * 2; a と b は定数に単純化され、これらを参照していた箇所は全て定数に置換された。コンパイラはここでデッドコード削除を適用し、不要なコードを削除し、コードを次のようにする。 int c;c = 12;if (12 > 10) { c = 2;}return c * 2; 次に、if文の条件が常に真であることが判明し、かつ c も省くことが可能であることがわかる。従って、コードは次のように削減される。 return 4; このコードが関数の定義そのものであった場合、コンパイラはさらにその知識を利用して、この関数を呼び出している箇所全てを定数 4 に置き換えて性能を向上させることが可能である。
※この「実際の最適化」の解説は、「定数畳み込み」の解説の一部です。
「実際の最適化」を含む「定数畳み込み」の記事については、「定数畳み込み」の概要を参照ください。
- 実際の最適化のページへのリンク