如何查看由C/C++程序的gcc(任何flavor)编译器生成的汇编代码?

问题描述:

我想优化大量的乘法和指针算法,并希望看到当我放入优化标志时编译器会做什么。如何查看由C/C++程序的gcc(任何flavor)编译器生成的汇编代码?

- 编辑 -

如何将其限制于特定的功能或代码块?

--Edit_2--

如何让GCC产生一个更简洁的汇编代码?

+2

不太详细的程序集?你究竟是什么意思? – 2009-08-30 21:29:06

+0

汇编代码。换句话说,我不想要很多有趣的事情,例如激活记录的初始化,但只有代码与我的状态相关。希望它更清晰。 – vehomzzz 2009-08-30 21:31:18

+1

所以你想让gcc生成_incorrect_汇编代码,那只能满足你对美的认识?不,先生。 – 2009-08-30 21:39:09

-S添加到您的命令行。

编辑:不要忘记它会将程序集放到您在-o开关下指定的文件中。

+0

你可以使用'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

如何限制它到一个特定的功能或代码块?

将该函数放在单独的源文件中(并为该源文件使用不同的命令行参数)。

+1

这就是我一直在做的事情。我很好奇,如果只有选择可能。 – vehomzzz 2009-08-30 21:24:12

+0

这可能并不反映它是如何真正优化,如果它可以内联到呼叫者。 (特别是在链接时优化)。即使只有一个参数是编译时常量也会产生很大的差异,或者已知数组的对齐或大小可以改变自动向量化。但是,是的,这很好,如果你明白你在做什么。 – 2018-02-27 20:04:23

您可以阻止您在Visual Studio调试器中的断点处编程,并执行“显示程序集”,甚至一次只执行一条指令。

+3

为什么这个回应是低票?这是一个非常有效的回应。 – aaronsnoswell 2013-12-24 00:10:10

+1

@aaronsnoswell我没有这样做,但可能是因为这个问题明确地涉及GCC。 – delicateLatticeworkFever 2014-11-01 15:48:19

您也可以在类似gdb的调试器中运行该程序并使用反汇编视图。在gdb中,您可以使用命令disass/m查看与当前位置上的C代码混合的程序集。

+0

你可以添加一个最小的例子吗? 'disass/m'只是打印'没有选择框架。“ – 2016-04-11 19:28:05