C++语言中的元类编程(九)

本来打算就此结束这一题目的讨论,但是突然想到自己忘记了一个很重要的问题,即程序执行效率和算法优化的问题,在很多情况下,程序执行效率是一个不可忽视的问题,上篇文字介绍的树形协议通用算法虽然比较简单,但是可能有些朋友会怀疑其执行效率,这种怀疑是合理的,那么我们就来讨论一下这个算法的效率问题。

如果要实现一个完整的协议解析过程,那么这个算法的效率显然不如一个 if else + 位操作的函数,但是,这个算法的最大好处是其灵活性,即,我们可以通过有意识的构建我们的协议树的形状来大大提高其处理效率。比如,把所有依赖于同一个条件节点的叶子节点合并为一个复合节点;再如,我们可以将我们不关心的fields简单的用一个field来描述(比如很多协议中都有填充字节,它通常是byte数组,这时候我们可以用一个field来描述这个填充字节的数组,它的条件field中一定包含了该填充字节数组的长度,我们可以在求fieldCount时,计算并保存整个数组的 size,并在fieldSize中返回它,而fieldCount只需要返回0或1)。

另外,当我们操作field序列时,也可以根据我们的需求来实现一些更快的逻辑,比如,当生成一个bit流时,我们用一个包含有默认值的常量数组去初始化这个bit流的buffer,这样,我们仅仅需要处理那些需要修改的field。

此外,这个算法的实现也是可以优化的,比如,我们可以增加一个(只)保存所有条件field的序列,来提高查找一个可选field的条件field的效率;再比如,我们可以利用内存池技术来提高field对象的创建和回收效率。

最后,如果在多核的CPU上工作,我们可以将算法实现为并发的方式,这样整体效率甚至有可能超过 if else + 位操作的函数。

总之,我们可以根据具体问题的要求,设计一些优化的方法,来提高整体效率,而且这种改动也比较容易通过人工的方法来检查它是否有错,比直接修改一段 if else 和位操作要可靠得多!

C++语言中的元类编程(九),布布扣,bubuko.com

C++语言中的元类编程(九)

上一篇:C语言-关键字static


下一篇:MIKROTIK ROS+PHP+MYSQL实现从数据库中配置DNS服务器