如果ELSE手动加速,我可以做些什么来改进大型交换机我可能需要某种散列或查找表。
我正在使用gcc和C代码,我怀疑gcc对此有任何内置的优化。
编辑:
我的开关代码就是每个开关的样子,根据某个特定的int值来做一些事情。
我的if else是这样的:

if( !strcmp( "val1", str ) )
foo();
else if( !strcmp( "val2", str ) )
foo2();
...

我也有这样的假设
if( struct.member1 != NULL )
foo();
if( struct.member2 != NULL )
foo2();

编辑2:
谢谢大家。我不确定该选哪一个作为答案,因为这些答案中有很多都有正确的观点和有价值的见解。不幸的是,我只能选一个。但谢谢大家!
最后,使用完美的哈希表似乎是获得ifs和交换机的O(n)访问时间的最佳方法。

最佳答案

要使用哈希表:
选择一个哈希函数。这个是个大人物在速度、散列质量和输出大小之间存在折衷。加密算法可以生成好的散列函数。hash函数使用输入值的所有位执行一些计算,以返回具有较小位数的某些输出值。
所以hash函数接受一个字符串
并返回一个介于0和之间的整数
不。
现在可以在大小为N的表中查找指向函数的指针。
由于可能发生冲突,表中的每个条目都将是一个链接列表(或其他可搜索的数据结构),即映射到同一哈希值的两个字符串。
例如。

lets say hash(char*) returns a value between 0 and 3.
hash("val1") returns 2
hash("val2") returns 0
hash("val3") also returns 0
hash("val4") returns 1

现在您的哈希表如下所示:
table[0] ("val2",foo2) ("val3", foo3)
table[1] ("val4",foo4)
table[2] ("val1",foo1)
table[3] <empty>

我希望您可以看到使用哈希表进行匹配的成本是如何受到计算哈希函数所需时间和搜索哈希表中的条目所需时间的限制的如果哈希表足够大,大多数哈希表条目将只有很少的项。

关于c - 加速大型交换机和if-elses,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4064425/

10-13 08:20