2

在缓存和分支预测之前的日子里,如果不鼓励为某些类型的优化制作自修改代码,那是相对普遍的。在 8 位到早期 32 位(例如 Amiga)的时代,它可能最常见于用汇编程序编写的游戏和演示中。

我不确定当时是否有任何编译器发出自修改汇编程序或机器代码。

我想知道是否有任何当前/现代编译器可以做到。显然,在具有高速缓存的强大处理器上,这将是无用的或太难了。

但是对于嵌入式系统中使用的非常多的简单处理器呢?对于任何简单/8位/嵌入式处理器,任何现代编译器都认为自我修改代码是一种可行的优化策略吗?


有一个类似标题的问题,“周围有任何自我改进的编译器吗? ”,但请注意,它不是同一个主题:

请注意,我说的是一个自我改进的编译器——而不是一个改进它编译的代码的编译器。

4

1 回答 1

4

今天所有的嵌入式系统都使用闪存 ROM。我相信 Amiga 和类似的系统都是基于 RAM 的系统。嵌入式系统中存在“自我修改”的唯一方式是你有引导加载程序,它根据应该使用的程序和/或功能对闪存的某些部分进行重新编程。

除此之外,程序在运行时修改自身是没有意义的。通常不鼓励从 RAM 运行代码,出于安全原因(可能由错误引起的意外修改)和电气原因(RAM 易失且对 EMC 比闪存更敏感)。

于 2012-10-25T09:34:25.647 回答