当我用c ++编写代码并使用Visual Studio(微软编译器)进行编译时,生成的程序集会对我的代码进行一些优化。
我想创建一个程序,用于学习(或教授其他人),它接受c ++代码,编译它,然后将优化的代码转换回c ++以显示优化的内容(通过diff程序)
这可能吗?如果是这样,怎么样?
答案 0 :(得分:5)
C ++和优化代码之间没有1:1映射,因此生成的代码可能总是与您期望的不同。您可以做的一件事是,指示编译器输出汇编源(-S option)
并查看编译器执行的操作。首先没有优化,然后启用它们,所以你可以看到差异。
答案 1 :(得分:2)
这是不可能的。没有人创造过这样的工具。
通常优化的代码无法转换回C ++。优化适用于看起来像汇编程序的中间表示。例如,如果函数看起来相似,则优化器可以合并部分函数。你怎么能用C ++表示这个?如果您将复制合并的部分,这将不是代码的真实表示。还有其他几种情况,如临时变量,控制流转换(从if-else和类似的跳转),子表达式消除等。
您可以做的最好的事情是打印汇编程序并尝试了解代码中发生了什么。我建议你玩小3-5行函数,并在对函数进行小修改后比较汇编程序列表。将函数的差异与汇编代码的差异进行比较通常可以说明很多。
前段时间我遇到了“链接器优化”。我的程序中有几个完全相同的函数(这是必需的),链接器决定合并为一个。在我理解之前,没有任何工作。