你可以在c源代码中手动完成所有gcc优化(-O2,-O3)吗?

时间:2017-10-01 02:39:34

标签: c gcc optimization

在我的课程项目中,我的项目设置为使用gcc的优化级别-O0(无优化),我们不允许在最终提交时更改它。

我使用-O2测试了我的代码,并且整个程序的速度提高了2倍。所以我想知道,是否有可能完成-O2所做的每个优化,并在我的代码中手动执行这些优化?或者是堆栈,框架,机器/程序集等内部的一些-O2优化,因此不允许程序员在我的源代码中手动进行这些优化(如果这样做有意义的话)

2 个答案:

答案 0 :(得分:6)

  

是否可以完成-O2所做的每项优化,并在我的代码中手动执行这些优化?

没有。编译器执行的许多优化都不能用C表示。其中一些包括:

  • 禁用帧指针
  • 在功能的开头和结尾删除不必要的寄存器保存/恢复
  • 装配上的“Peephole”优化,例如删除冗余移动,加载或存储
  • 插入无操作以将循环对齐到特定地址边界(通常为16个字节)

这并不是说编译器执行的所有优化都是不可翻译的 - 当然 - 只是其中一些是。

答案 1 :(得分:1)

是的,但这与在Minecraft中构建自己的8086级微处理器相同 - 不值得花时间和精力。是的,这些优化中的许多涉及低于抽象语言级别的东西。你的教授可能不知道你想要一个未被优化的可执行文件。