在编译一些代码时,我注意到在 -O0 和 -O1 之间创建的汇编程序存在很大差异。我想通过启用/禁用优化,直到我发现是什么导致了汇编程序的某些变化。
如果我使用 -fverbose-asm 来准确找出 O1 与 O0 相比启用了哪些标志,然后手动禁用它们,为什么生成的汇编程序仍然存在如此巨大的差异?即使我使用 O0 运行 gcc 并手动添加 fverbose-asm 所说的使用 O1 启用的所有标志,我也不会获得与仅使用 O1 相同的汇编程序。
除了 '-f...' 和 '-m...' 还有什么可以改变的吗?
或者只是'O1'与'O0'相比具有一些无法关闭的魔力。
抱歉,这与使用 GCC + ARM 在递归期间减少堆栈使用有关,但提及它使问题有点难以理解。