c - 使用枚举时的高效 switch 语句

标签 c enums switch-statement processing-efficiency

我有一个枚举和一个 switch 语句,它使用了一些但不是全部的枚举条目,它们目前也乱序了,即我有以下内容:

enum prot_tun_stat_e    {
    STAT_A = 0,     
    STAT_B,     
    STAT_C, 
    STAT_D,
    STAT_E,
    STAT_F, //5
    STAT_G,
    STAT_H,
    STAT_I,
    STAT_Y,
    STAT_K,     //10
    STAT_COUNT      //must be last
} __attribute__((packed));

然后我使用以下条目进行切换:

switch(var) {
case C:
break;
case D:
break
case F:
break
case G:
break
default
}

我想知道我是否更好地将枚举中的项目重新排列为 C=1,D=2,F=3&G=4 ?这样会更有效率吗?

谢谢, 罗恩

平台:PowerPC,编译器diab

最佳答案

如果编译器可以确定 switch 语句的参数被限制为一个小数字,那么它可以创建一个 jump table .如果值是连续的,但 4 个条目之间的差异或所需的 10 个条目之间的差异不太可能重要,则此表将占用较少的空间。 (请注意,0-3 的范围比 1-4 更好——尽管编译器可以通过跳转到偏移量 n - 1 来处理这个问题)。

您可以检查编译器的输出以查看是否正在创建跳转表(假设您可以阅读汇编!)。当然还有所有性能问题的答案:剖析它!

关于c - 使用枚举时的高效 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370011/

相关文章:

C:从 OpenSSL 套接字读取

c++ - 如何理解充满宏的大型 C/C++ 代码?

c - 为什么我不能将 "private"函数声明为静态的,而我根本不能将它放在头文件中?

c# - 使用 Dapper 填充枚举属性

c++ - switch语句有问题

c++ - 衡量标准是什么?为什么程序员应该关心? - 联网

objective-c - 枚举 Objective-C 和 Swift 之间的互操作性

c++ - 在类中添加枚举定义会破坏其二进制向后兼容性吗?

java - 访问不同情况下的返回值

C++ fatal error C1061与大开关,元编程