Cで自己修正コードを移植可能にすることは可能ですか?C標準で自己修正コードが許可されていますか?
私が尋ねる理由は、(実行時に実行されるコードは実際にはvテーブルなどのデータとして生成されるため)OOPは自己変更コードに依存していますが、これがあまりにも遠すぎると、コンパイラのほとんどの最適化が妨げられるようです。例えば
:それはp
を妨害しないため
void add(char *restrict p, char *restrict pAddend, int len)
{
for (int i = 0; i < len; i++)
p[i] += *pAddend;
}
最適化コンパイラは、ループの外*pAddend
をホイストできました。ただし、は自己修正コードで有効な最適化ではなくなりました。
このように、Cは自己修正コードを許可していないようですが、同時に、CでOOPのようなことをすることができないということを意味しませんか? Cは本当に自己修正コードをサポートしていますか?
Cには関数ポインタがあります。これは、実行時ディスパッチ機構を構築するために必要なものです。あなたは「自己修正コード」は必要ありません。 – Nemo
私は、C++のOOP実装が自己修正コードを使用しているとは言いませんが、私の意見では、それは単なるデータ駆動型のコードです。バーチャルファンクションは、概念的には単純な「スイッチ」とはまったく異なります。 – Vlad
@ニモ:これはまだ自己修正コードの一種ですか? – Mehrdad