2

キャッシュや分岐予測が登場する前の時代には、特定の種類の最適化のために自己変更コードを作成することが奨励されていない場合でも、比較的一般的でした。Amiga などの 8 ビットから初期の 32 ビットまでの時代に、アセンブラーで記述されたゲームやデモでおそらく最も一般的でした。

当時のコンパイラが自己修正アセンブラまたはマシンコードを発行したかどうかはわかりません。

私が疑問に思っているのは、それを行う現在/最新のコンパイラがあるかどうかです。明らかに、キャッシュを備えた強力なプロセッサでは役に立たないか、難しすぎます。

しかし、組み込みシステムで使用されるような非常に多くの単純なプロセッサについてはどうでしょうか? 自己変更コードは、単純な/8ビット/組み込みプロセッサ向けの最新のコンパイラによって実行可能な最適化戦略と見なされていますか?


「 Is there any self-improving compiler around? 」という同様のタイトルの質問がありますが 、同じ主題に関するものではないことに注意してください。

コンパイルするコードを改善するコンパイラではなく、それ自体を改善するコンパイラについて話していることに注意してください。

4

1 に答える 1

4

現在、組み込みシステムはすべてフラッシュ ROM を使用しています。Amiga などは RAM ベースのシステムだったと思います。組み込みシステムに「自己変更」が存在する唯一の方法は、使用するプログラムや機能に応じてフラッシュの特定の部分を再プログラムするブートローダーがある場合です。

それとは別に、プログラムが実行時に自分自身を変更することは意味がありません。RAM からコードを実行することは、安全上の理由 (バグによる偶発的な変更の可能性) と電気的な理由 (RAM は揮発性であり、フラッシュよりも EMC に対してはるかに敏感です) から、一般的にはお勧めできません。

于 2012-10-25T09:34:25.647 に答える