【发布时间】:2012-10-24 14:36:15
【问题描述】:
在缓存和分支预测之前的日子里,如果不鼓励为某些类型的优化制作自修改代码,那是相对普遍的。在 8 位到早期 32 位之间的时代,它可能最常见于用汇编程序编写的游戏和演示,例如 Amiga。
我不确定当时是否有任何编译器发出自修改汇编程序或机器代码。
我想知道是否有任何当前/现代编译器可以这样做。显然,在具有缓存的强大处理器上,这将是无用的或太难了。
但是嵌入式系统中使用的非常多的简单处理器呢?对于任何简单/8 位/嵌入式处理器,任何现代编译器都认为自我修改代码是一种可行的优化策略吗?
有一个类似标题的问题,“Is there any self-improving compiler around? ",但请注意,这不是同一个主题:
请注意,我说的是一个自我改进的编译器——而不是一个改进它所编译的代码的编译器。
【问题讨论】:
-
这在 1960 年代可能通过 COBOL ALTER 动词更为常见。
-
用于 8 位和 Amiga/Atari 的旧编译器根本没有生成非常高效的代码,所以我很确定他们没有使用这样的技巧。同样对于嵌入式系统,代码通常位于 ROM 中,因此不能进行自我修改。但这是一种有趣的技术:)
-
@VilleKrumlinde:哦,我忘记了 ROM 因素——谢谢。
-
如果任何编译器生成自修改代码,即使作为选项,我都会感到惊讶。除了 ROM 问题,它不是中断/线程安全的。
-
@hippietrail - 如果您确实找到了使用这种可恶“优化”的编译器,请将其关闭或找到另一个编译器:)
标签: optimization compiler-construction embedded self-modifying 8-bit