gpt4 book ai didi

绝对值的编译器优化

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:17 26 4
gpt4 key购买 nike

我的问题是开放式的,答案可能过于复杂,我无法理解,但如果您有一些高水平的评论,我将不胜感激!

我写了一个简单的绝对值函数

int absval(int val)
{
return (val<0) ? -val: val;
}

然后用 gcc 的 -O 标志和 -S 选项编译它。 gcc 生成了以下汇编代码

movl    %edi, %edx
sarl $31, %edx
movl %edx, %eax
xorl %edi, %eax
subl %edx, %eax
ret

我理解汇编代码如何找到一个数的绝对值,但令我困惑的是编译器是如何得出这段代码的。具体来说,它消除了任何控制流。旧版本的 gcc 会生成相同的代码吗?

最佳答案

优化通常通过模式匹配算法实现。编译器编写者对一组固定的模式进行硬编码,以便优化器寻找并使编译器为他们生成最佳代码。

换句话说,编译器被硬编码为在各种上下文中识别这种特定的“如果否定则否定”模式,并为其生成这种无分支机器代码。

在实际的编译器中,模式不一定像“如果为负则为负”那样具体。一旦将代码中的特定细节替换到其中,它可能是一些更高级别的元模式,它会减少为“如果否定则否定”。但无论如何都会发生某种模式匹配。

关于绝对值的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600557/

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