您可以在您的 c 源代码中手动执行所有 gcc 优化(-O2、-O3)吗?

标签 c gcc optimization

在我的类(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/

相关文章:

c - Gcov 有效,但 Gcovr 无效

c - 非显式初始化的成员在其部分成员被初始化的结构中始终为 0?

python - NumPy:按选定的第二轴元素对 ndarray 第一轴进行排序

c++ - GCC 4.9 中的模板实例化错误,在 GCC 4.8 中工作正常

python - 查找 3 维 numpy 数组的唯一值的索引

python - 在这段代码中是否有任何 numpy 技巧可以避免 for 循环?

c - 如何通过高效算法得到有限集上的所有代数结合运算?

无法通过 dev_queue_xmit() 发送数据包

c - 调用 setsockopt() 来禁用 udp 多播中的环回时,它返回 255

python - 从 golang 调用 python