私はコンパイラーを書いています、そして私は最適化に関するリソースを探しています。私はマシンコードにコンパイルしているので、実行時に何でも問題外です。
私が最近探していたのは、コードの最適化を減らし、セマンティック/高レベルの最適化を増やすことです。例えば:
free(malloc(400)); // should be completely optimized away
これらの関数が完全にインライン化されていても、最終的にはインライン化できないOSメモリ関数を呼び出す可能性があります。特別な場合のルールをコンパイラーに組み込むことなく、そのステートメントを完全に排除できるようにしたいと思います(結局のところ、これmalloc
は単なる別の関数です)。
もう一つの例:
string Parenthesize(string str) {
StringBuilder b; // similar to C#'s class of the same name
foreach(str : ["(", str, ")"])
b.Append(str);
return b.Render();
}
b
この状況では、の容量をに初期化できるようにしたいと思いますstr.Length + 2
(メモリを無駄にすることなく、結果を正確に保持するのに十分です)。
正直なところ、どこから始めればいいのかわからないので、どこかで始めたいと思っていました。同様の分野で行われた作業はありますか?一般的な意味でこのようなものを実装しているコンパイラはありますか?