gpt4 book ai didi

gcc - 为什么底部测试循环更可取?

转载 作者:行者123 更新时间:2023-12-04 14:32:38 25 4
gpt4 key购买 nike

我曾经听过有人说编译器经常将循环条件移到循环的底部。也就是说,像这样的循环:

while (condition) {
...
}

改为:
if (condition) {
do {
...
} while (condition);
}

关于机器独立优化,为什么后者更可取?

最佳答案

如果没有编译器优化,第一个循环会像这样转到汇编代码:

  @@:
cmp ... ; or test ...
jz @f

...
jmp @b

而第二个循环是这样的:
jmp bottom

@@:
...

bottom:
cmp ... ; or test ...
jz @b

通常预测会采用条件跳转,因此第一种方法可能会导致更多的管道/指令缓存刷新。

然而,最重要的是,对于第一个循环,每个循环迭代有两个可用的分支( 2N ),而在第二个循环中,每个循环迭代只有一个分支,其第一次无条件跳转( N+1 )的开销固定。

有关循环优化的更多信息,请参阅此 assembly optimisation guide 的第 88 页。

关于gcc - 为什么底部测试循环更可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com