Cで移植可能な方法で自己変更コードは可能ですか?
私が尋ねる理由は、ある意味で、OOP は自己変更コードに依存しているからです (実行時に実行されるコードは、実際には v テーブルなどでデータとして生成されるため)。これは行き過ぎであり、コンパイラでのほとんどの最適化を妨げます。
例えば:
void add(char *restrict p, char *restrict pAddend, int len)
{
for (int i = 0; i < len; i++)
p[i] += *pAddend;
}
最適化コンパイラは*pAddend
をループから引き上げることができp
ます。ただし、これは自己変更コードでは有効な最適化ではなくなりました。
このように、C は自己変更コードを許可していないように見えますが、同時に、C では OOP のようなことができないことを意味するのではないでしょうか? C は本当に自己変更コードをサポートしていますか?