引自https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html:
-falign的标签
-falign-标签= N
将所有分支目标对齐到2的幂边界,跳过n个字节,如-falign-functions。 此选项很容易 使代码更慢,因为它必须在插入时插入虚拟操作 在通常的代码流程中达到了分支目标。
-fno-align-labels和-falign-labels = 1是等效的,表示标签未对齐。
如果-falign-loops或-falign-jumps适用且大于 这个值,然后使用它们的值。
如果未指定n或为零,请使用与机器相关的默认值 这很可能是'1',意味着没有对齐。
在-O2,-O3等级启用。
更多地考虑这个标志会让它失去更多的意义......有引发代码缓存未命中的后果,甚至启用意味着什么时候参数需要数值(1 ..)?
答案 0 :(得分:5)
它没有这么说。它说可以轻松地使代码变慢。这意味着,在某些情况下,它可以使代码变慢。在其他情况下,它可以使代码更快。
对齐会导致代码运行速度变慢:
nop
操作减慢代码对齐可能导致更快地运行代码:分支预测,指令获取和上帝知道什么。
在单if
的情况下,很难说哪种效果更强。这取决于条件。
但是,对于循环,通常代码变得更快。为什么?因为慢因子只发生一次,但循环的每个循环都会更快地执行。
(我的GCC似乎将标签与8对齐)