gpt4 book ai didi

c 中的 case 语句效率

转载 作者:太空狗 更新时间:2023-10-29 17:22:58 26 4
gpt4 key购买 nike

我在 Visual C 中有一个很大的 switch 语句,大约有 250 个案例:

#define BOP -42
#define COP -823
#define MOP -5759

int getScarFieldValue(int id, int ivIndex, int rayIndex, int scarIndex, int reamIndex)
{
int returnValue = INT_MAX;
switch (id)
{
case BOP : returnValue = Scar[ivIndex][rayIndex].bop[scarIndex][reamIndex]; break;
case COP : returnValue = Scar[ivIndex][rayIndex].cop[scarIndex][reamIndex]; break;
case MOP : returnValue = Scar[ivIndex][rayIndex].mop[scarIndex][reamIndex]; break;
.....
default: return(INT_MAX);
}
}

您会注意到,#defines 的范围很大,从 -1 到 -10,000。事情进展缓慢,我想知道花几个小时将这 250 个定义重新定义为更窄(甚至连续)的范围是否可以加快速度。我一直认为编译器会以一种使它们的数值无关紧要的方式处理 case 值,但我无法找到任何讨论来验证/使该假设无效。

最佳答案

反汇编编译后的代码,看看编译器做了什么。我看过几个不同编译器的输出,大型 switch 语句总是被编译成二进制决策树或跳转表。跳转表是您可以获得的最优化的东西,如果您打开的值在一个狭窄的范围内,它们更有可能由编译器生成。它还有助于在某些编译器上使用默认语句(但在其他编译器上不是必需的)。

在这种情况下,反汇编是您唯一的好选择,此级别的代码生成细节很少有详细记录。

关于c 中的 case 语句效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563733/

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