私は現在Cにコンパイルする言語を書いています。私がILと言うときは、C言語のように、別のCコンパイラでアセンブリを生成するコードを記述します。例えばgccまたはclang。中間言語としてのCに関する質問
私が生成するCコードは、それがより有益になります:私はいくつかの簡単なオプトパスした場合は
- (定数伝播、デッドコード除去を、...)は、この作業量を削減します本当に人間のCコードではないので、Cコンパイラはやらなければならないのですか?
- 3アドレスコードやSSAなどのフォームをコンパイルし、これを関数、ラベル、変数を含むCプログラムに与えると、Cコンパイラが最適化するのが容易になるか、難しくなりますか?どの一緒にリンクの種類は、次の質問を形成する
...
- Cにコンパイル言語から良いCコードを生成するための最適な方法は何ですか?
- すべての最適化を行い、それをコンパイラに任せておく価値はありますか?
「非C言語の全体点は、gotos_のスパゲッティを作成することです」はナンセンスです!私はgaccを使わずに完全に良いCを生成するyaccで言語を書いた。 –
これらの操作が高価な理由を詳しく説明できますか?誰かがCにコンパイルする前に悪いコードを書いていた場合、これらを最適化できると思いますか?私はヒープメモリの使用を制限することはできないと思う。なぜなら、この言語は比較的低レベルなのでGCがないからプログラマがメモリ管理をするからだ。 –
メインメモリの読み込みと書き込みには、プロセッサからデータを渡して戻す作業が含まれ、プロセッサ内部で行われる処理よりもはるかに高価です。一緒に使用されるアイテムが近くにあり、同じデータに作用する操作が互いに接近するようにデータを配置することによって、それらを最小限に抑えます。 –