2013-07-27 160 views
0

gcc和g ++能够用各种优化来编译C++代码。 gcc/g ++也可以输出汇编指令。我相信在输出asm代码之前会应用这些优化。是否可以使用gcc/g ++提供的优化来编译汇编代码?

通常gcc/g ++代码比我能在asm中产生的任何东西都快,可能是因为我是汇编程序的新手,所以我不知道很多指令。 (基本上我有点垃圾)。

了解优化的一个好方法是检查C++编译器的汇编级输出,或者告诉我。

是否有可能使用gcc或g ++或其他完全类似gas或nasm的代码来编译由gcc或g ++生成的汇编代码?

有两个原因,我问:

首先,它会很酷能够生产自己的汇编代码,并用gcc编译优化它,看看是否有任何差异出现。这实际上更像是一种学习工具。

问第二个原因是检查我是否可以加快gcc的汇编代码。也许我做不到,我知道gcc几乎是优化方面的专家,所以我不希望在这里获得任何东西,但它会带来一个有趣的挑战 - 击败编译器!

所以是的,这样的事情是可能的吗?

+0

GCC只生成汇编。编译程序时,GCC生成程序集,然后调用[_as_](http://linux.die.net/man/1/as)(_gas_)来执行程序集部分。 – DaoWen

+0

@DaoWen啊,很好,所以有可能?我猜''gcc main.c -s -o main.s'然后'作为main.s -o main.o' - 但是我应该说什么来告诉它它需要什么格式,并且它应该是' .s'还是'.S'? – user3728501

+0

优化汇编代码对于计算机来说真的很难做......除了可能将一条指令改为相当于它的指令而花费较少时间之外,优化将很困难。这是因为同样的原因,没有好的机器代码反编译器 - 机器代码非常精确,以至于很难说出它在实际操作中的作用。由于计算机无法分辨您正在尝试做什么,因此无法优化。 – Aaron

回答

0

GCC对源代码的IR(中间表示)进行优化,因此所有优化都在创建汇编代码之前应用。当然,在某些情况下,可能会考虑将某些事情视为“优化”,以选择哪些汇编指令针对一组给定的操作发出 - 但这又是在IR级决定的。

我想你可能会发现这个答案也有帮助:Get Assembly code after every optimization GCC makes?

+0

是的,这很有用谢谢 – user3728501

相关问题