假设我有这样的代码(注意,在编辑器中,我可以看到行号)
//File example_optimization.cpp
#1 int spreadi = (d_ai - d_bi);
#2 int transactionCosti = spreadi / (spreadi < 10 ? 1 : 10);
如果编译器是一个优化编译器,并且设置了正确的标志,我想向我自己证明,除法1实际上并没有发生。
在linux中是否有一个工具(或者可以通过管道使用的工具组合),我可以这样说:
ctoassembler -c g++ -l 1 2 example_optimization.cpp
这个命令说,调用ctoassembler使用编译器和链接器gnu g++,并转储c++文件example_optimization.cpp的第1行到第2行。默认情况是将汇编程序代码输出到stdout。
我不关心它的用法。我感兴趣的是能够看到编译器将我的代码转化为什么,而不必自己搜索它。
如果这样做更容易,我不介意使用对象文件,但无论如何,最好是“并排”显示c++源代码和相应的汇编程序代码。
发布于 2015-03-09 19:39:18
GCC将停止处理生成的汇编程序文件:
-S在编译阶段结束后停止,不要组装。输出以汇编程序代码文件的形式为每个指定的非汇编程序输入文件。默认情况下,源文件的汇编程序文件名是通过用‘.s’替换后缀‘.c’、‘I’等来创建的。 不需要编译的输入文件将被忽略。
来源:https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options
您的另一个选项是调试程序并查看汇编程序。
发布于 2015-03-09 19:47:48
通过gdb运行代码,在您想要的C行上放置一个断点,然后运行,然后键入disassemble
来查看接下来的几行代码。
https://stackoverflow.com/questions/28950287
复制相似问题