【问题标题】:Is it possible to compile assembly code with optimizations provided by gcc / g++?是否可以使用 gcc / g++ 提供的优化来编译汇编代码?
【发布时间】: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++


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 2017-10-27
    • 2023-01-31
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多