使用枚举

时间:2016-11-01 23:08:51

标签: c enums switch-statement processing-efficiency

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

我不能谈论map[string]string编译器,因为我不熟悉它,但优化编译器很可能会为{{1}创建一个跳转表 Cache{mapping: make(map[string]string)}上的语句。所以订单无关紧要。话虽如此,你不应该担心这些琐碎的事情。如果我误解了你的问题,请纠正我。