1

当我用 c++ 编写代码并使用 Visual Studio(Microsoft 编译器)进行编译时,生成的程序集会对我的代码进行一些优化。

我想创建一个程序,用于学习(或教他人),它采用 c++ 代码,编译它,然后将优化后的代码转换回 c++ 以显示优化的内容(通过 diff 程序)

这可能吗?如果是这样,怎么做?

4

2 回答 2

5

C++ 和优化代码之间没有 1:1 的映射,因此生成的代码可能总是看起来与您预期的不同。您可以做的一件事是,指示编译器输出汇编源代码(-S option)并查看编译器做了什么。首先没有优化,然后启用它们,因此您可以看到差异。

于 2013-07-22T17:05:53.850 回答
2

这是不可能的。从来没有人创造过这样的工具。

一般来说,优化后的代码不能转换回 C++。优化适用于看起来像汇编程序的中间表示。例如,如果它们看起来相似,优化器可能会合并部分功能。你如何用 C++ 来表示这个?如果您将复制合并的部分,这将不是代码的真实表示。还有其他几种情况,例如临时变量、控制流转换(从 if-else 和类似的跳转)、子表达式消除等。

您可以做的最好的事情是打印汇编程序并尝试了解代码中发生了什么。我建议您使用 3-5 行的小函数,并在对函数进行小幅修改后比较汇编程序列表。将函数的差异与汇编代码的差异进行比较通常会说明很多事情。

前段时间我遇到了“链接器优化”。我的程序中有几个完全相同的函数(这是必需的),链接器决定将它们合并为一个。在我明白这一点之前,没有任何效果。

于 2013-07-22T17:04:49.520 回答