我有一个枚举和一个 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/