c – 为什么GCC在明确表示会减慢程序时会在O2 / O3上启用优化?

前端之家收集整理的这篇文章主要介绍了c – 为什么GCC在明确表示会减慢程序时会在O2 / O3上启用优化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
引自 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

-falign-labels

-falign-labels=n

Align all branch targets to a power-of-two boundary,skipping up to n bytes like -falign-functions. This option can easily
make code slower
,because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.

-fno-align-labels and -falign-labels=1 are equivalent and mean that labels are not aligned.

If -falign-loops or -falign-jumps are applicable and are greater than
this value,then their values are used instead.

If n is not specified or is zero,use a machine-dependent default
which is very likely to be ‘1’,meaning no alignment.

Enabled at levels -O2,-O3.

考虑这个标志会使它失去更多意义……有引发代码缓存未命中的后果,甚至启用意味着何时参数采用数值(1 ..)?

解决方法

它没有这么说.它说可以轻松地使代码变慢.这意味着,在某些情况下,它可以使代码变慢.在其他情况下,它可以使代码更快.

对齐会导致代码运行速度变慢:

>增加代码大小,因此代码不在缓存中的可能性更高.
>添加了nop操作减慢了代码

对齐可能导致更快地运行代码:分支预测,指令获取和上帝知道什么.

在单个if的情况下,很难说哪个效果更强.这取决于条件.

但是,对于循环,通常代码变得更快.为什么?因为慢因子只发生一次,但循环的每个循环都会更快地执行.

(我的海湾合作委员会似乎将标签与8对齐)

原文链接:https://www.f2er.com/c/118850.html

猜你在找的C&C++相关文章