sha*_*oth 6 c++ compiler-construction
代码重复通常很糟糕,通常很容易发现.我想编译器可以在最简单的情况下自动检测它 - 它们已经解析了文本并获得了他们以各种方式分析的中间表示 - 检测可疑模式,如未初始化的变量,优化发出的代码等等.我猜他们经常可以检测到功能重复以这种方式编码并在发出机器代码时对其进行说明.
是否有C++编译器可以检测重复的代码并且只发出一次相应的机器代码而不是源文本中的每个副本?
有些人有,有些则没有.
从LLVM优化的页面:-mergefunc(MergeFunctions传递,它是如何工作的)
这些函数在LLVM中间表示中以小块分隔,此优化过程尝试合并类似的块.但是不能保证成功.
您会在此页面上找到许多其他优化,即使其中一些可能在第一眼看上去很神秘.
我会添加一个注释,重复的代码对于编译器/可执行文件来说并不是那么糟糕,从维护的角度来看它是坏的,并且编译器无法做到这一点.
我认为这个问题假设编译器总是希望消除代码重复.代码重复不利于源代码的可读性/可维护性而不是编译代码的必要性能,实际上可以考虑将循环展开视为编译器添加重复代码以提高速度.编译后的代码不需要遵循与源代码相同的原则,并且通常不会像机器那样不能用于人类阅读.
通常编译器正在忙于编译而不是转换源代码,当然IDE可能允许这两者.
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |