gpt4 book ai didi

c++ - C++ 中的无分支 if 是什么样子的?

转载 作者:可可西里 更新时间:2023-11-01 17:29:35 25 4
gpt4 key购买 nike

我意识到我在那个领域非常缺乏知识(说我不了解 jack 的奇特方式)。

是否有关于如何以及何时使用它们的文档?

最佳答案

除了所有基于 twiddling 的无分支代码(不会涵盖所有内容,例如 FP)之外,您还可以获得专门用于创建无分支代码的说明,这些说明是 SETccFCMOVcc和 x86 下的 CMOVcc,它们根据比较中的条件标志执行操作。

一个非常简单的例子是(是的,这个例子很简单,一个人可能永远不会写这样的东西,它只是为了清楚地证明一个观点):

bool CheckZero(int x)
{
if(x == 0)
return true;

return false;
//OR we can use: return (x == 0) ? true : false;
}

现在一个简单的 x86 编译器可能会将其编译为:

    MOV EAX,[ESP + 4]
TEXT EAX,EAX
JE _TRUE
XOR EAX,EAX
RETN 4

_TRUE:
MOV EAX,1
RETN 4

优化的 x86 编译器会将其分解为以下无分支代码(或类似代码):

MOV ECX,[ESP + 4]
XOR EAX,EAX
TEST ECX,ECX
SETE AL
RETN 4

可以找到一个更复杂的例子here .

但是,这是编译器会执行的操作,而不是您应该担心的事情(至少在不分析编译器输出的情况下)。但是如果代码需要无分支而不会失败,C++ 无法提供足够的控制来做到这一点,因此您需要使用(内联)汇编。

关于c++ - C++ 中的无分支 if 是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133322/

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