我有一个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
语句创建跳转表。所以顺序不重要。话虽如此,你也不必为这些小事操心。如果我误解了你的问题,请纠正我。