使用枚举时的C高效开关语句



我有一个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

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

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

我不能谈论diab编译器,因为我不熟悉它,但是优化编译器很可能会在enum语句上为switch语句创建跳转表。所以顺序不重要。话虽如此,你也不必为这些小事操心。如果我误解了你的问题,请纠正我。

最新更新