如何查看由C/C++程序的gcc(任何flavor)编译器生成的汇编代码?
我想优化大量的乘法和指针算法,并希望看到当我放入优化标志时编译器会做什么。如何查看由C/C++程序的gcc(任何flavor)编译器生成的汇编代码?
- 编辑 -
如何将其限制于特定的功能或代码块?
--Edit_2--
如何让GCC产生一个更简洁的汇编代码?
将-S
添加到您的命令行。
编辑:不要忘记它会将程序集放到您在-o
开关下指定的文件中。
你可以使用'gcc -O3 -march = native foo.c -S -o- |更少“管道到'less'而不是创建'.s'文件。另请参阅[如何从GCC/clang程序集输出中删除“噪音”?](https://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly-output)了解更多信息有关查看asm输出的“有趣部分”的提示,特别是** Matt Godbolt的CppCon2017演讲:[“我的编译器最近为我做了什么?取消编译器的盖子“](https://youtu.be/bSkpMdDe4g4)** – 2018-02-27 20:00:53
如何限制它到一个特定的功能或代码块?
将该函数放在单独的源文件中(并为该源文件使用不同的命令行参数)。
这就是我一直在做的事情。我很好奇,如果只有选择可能。 – vehomzzz 2009-08-30 21:24:12
这可能并不反映它是如何真正优化,如果它可以内联到呼叫者。 (特别是在链接时优化)。即使只有一个参数是编译时常量也会产生很大的差异,或者已知数组的对齐或大小可以改变自动向量化。但是,是的,这很好,如果你明白你在做什么。 – 2018-02-27 20:04:23
您可以阻止您在Visual Studio调试器中的断点处编程,并执行“显示程序集”,甚至一次只执行一条指令。
为什么这个回应是低票?这是一个非常有效的回应。 – aaronsnoswell 2013-12-24 00:10:10
@aaronsnoswell我没有这样做,但可能是因为这个问题明确地涉及GCC。 – delicateLatticeworkFever 2014-11-01 15:48:19
您也可以在类似gdb
的调试器中运行该程序并使用反汇编视图。在gdb
中,您可以使用命令disass/m
查看与当前位置上的C代码混合的程序集。
你可以添加一个最小的例子吗? 'disass/m'只是打印'没有选择框架。“ – 2016-04-11 19:28:05
不太详细的程序集?你究竟是什么意思? – 2009-08-30 21:29:06
汇编代码。换句话说,我不想要很多有趣的事情,例如激活记录的初始化,但只有代码与我的状态相关。希望它更清晰。 – vehomzzz 2009-08-30 21:31:18
所以你想让gcc生成_incorrect_汇编代码,那只能满足你对美的认识?不,先生。 – 2009-08-30 21:39:09