在我的类(class)项目中,我的项目设置为使用 gcc 的优化级别 -O0(无优化),并且我们不允许在最终提交时更改它。
我使用 -O2 测试了我的代码,整个程序的速度提高了 2 倍。所以我想知道,是否可以完成 -O2 所做的每个优化,并在我的代码中手动进行这些优化?或者是堆栈、框架、机器/程序集等内部的一些 -O2 优化,从而不允许我(程序员)在源代码中手动进行这些优化(如果这有意义的话)
最佳答案
Is it possible to go through each optimization that -O2 does, and manually do those optimizations in my code?
没有。编译器执行的许多优化无法用 C 语言表示。其中一些包括:
- 禁用帧指针
- 在函数的开头和结尾删除不必要的寄存器保存/恢复
- 装配上的“窥视孔”优化,例如删除多余的移动、加载或存储
- 插入空操作以将循环与特定地址边界(通常为 16 字节)对齐
当然,这并不是说编译器执行的所有优化都是不可翻译的——只是其中一些是不可翻译的。
关于您可以在您的 c 源代码中手动执行所有 gcc 优化(-O2、-O3)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46508736/