【发布时间】:2013-07-27 00:15:39
【问题描述】:
gcc 和 g++ 能够编译具有各种优化的 c++ 代码。 gcc / g++ 也可以输出汇编指令。我相信这些优化是在输出 asm 代码之前应用的。
通常 gcc / g++ 代码比我在 asm 中生成的任何代码都快,可能是因为我是汇编程序新手,所以我不知道很多指令。 (基本上我有点垃圾。)
了解优化的一个好方法是检查 C++ 编译器的汇编级输出,至少有人告诉我。
是否可以使用 gcc 或 g++ 或其他完全像 gas 或 nasm 的东西来编译由 gcc 或 g++ 生成的汇编代码?
我问的原因有两个:
首先,能够生成我自己的 asm 代码,并使用 gcc 优化对其进行编译,看看是否出现任何差异,这将是一件很酷的事情。这实际上更像是一种学习工具。
询问的第二个原因是检查我是否可以加快 gcc 的汇编代码。可能我做不到,我知道 gcc 几乎是优化方面的专家,所以我不期望在这里获得任何东西,但这会是一个有趣的挑战 - 击败编译器!
所以是的,这种事情可能吗?
【问题讨论】:
-
GCC 只生成程序集。编译程序时,GCC 会生成程序集,然后调用 as (gas) 来完成程序集部分。
-
@DaoWen 啊,太好了,有可能吗?我猜是
gcc main.c -s -o main.s然后是as main.s -o main.o- 但是我应该对gas 说什么来告诉它它需要什么格式,应该是.s还是.S? -
优化汇编代码对于计算机来说真的很难......除了可能将一条指令更改为花费更少时间的等效指令之外,优化将很困难。这与没有好的机器代码反编译器相同的原因 - 机器代码非常精确,以至于在实际水平上很难说出它在做什么。因为计算机无法告诉你要做什么,它没有优化的方法。
-
@JesusPlusPlus11 那么 -O 和 -os 是怎么回事?
-
@EdwardBird 是的,就像这样 - 如果计算机理解代码的作用,则计算机可以优化代码。计算机可以理解 C++ 代码的作用,但不能理解汇编代码的作用。为什么?想象一下,如果您一次只逐个像素地查看图像,而不是从整体上查看整个图像,那么尝试了解图像代表什么。
标签: optimization gcc assembly g++