gpt4 book ai didi

c++ - 使用分支启动函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:08 25 4
gpt4 key购买 nike

从优化和分支预测器的角度来看,这两个代码之间有什么区别吗?

首先:

void think_and_do(){
if(expression){
//Set_A of instructions
}
else{
//Set_B of instructions
}
}

int main(){
think_and_do();
}

第二:

void do_A(){
//Set_A of instructions
}

void do_B(){
//Set_B of instructions
}

int main(){
if(expression){
do_A();
}
else{
do_B();
}
}

最佳答案

我在 godbolt.org 上做了测试 think_and_domain

首先观察,如果您的示例很简单,它们大多会被优化掉。如果没有 cin,两个示例都应该编译为:

    xor     eax, eax
add rsp, 8 #may or may not be present.
ret

第二个观察是 main: 中的代码完全相同,并且没有调用任何函数,所有内容都是内联的。

第三个观察结果是两个例子都生成了下面的代码

    mov     edx, DWORD PTR a[rip]
mov eax, DWORD PTR b[rip]
cmp edx, eax
je .L8

即它们填充一个周期的 4 条指令以充分利用发出(并忽略 cmp 和 jump 宏融合的可能性)。

如果他们从一个开始

    cmp     edx, eax
je .L8

问题带宽的一半可能已被浪费。

关于c++ - 使用分支启动函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218857/

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