我花了一个月的全职时间写了一个本地 C++ 方程解析器。它可以工作,但速度很慢(比硬编码方程式慢30-100倍)。我能做什么来提高速度?
我阅读了所有我能找到的有关高效代码的信息,大致上:
- 解析器将字符串方程表达式转换为“操作”对象列表。
- 操作对象具有两个函数指针:“getSource”和“evaluate”。
- 要求解方程,我只需在操作列表上进行for循环,依次调用每个函数即可。
在求解方程时不存在单个if/switch - 所有条件都由解析器处理,当它最初分配函数指针时。
- 我尝试内联所有函数指针指向的函数 - 没有改进。
- 转换为函数对象(functors)是否有帮助?
- 如何使用派生出的完整“操作”类集合,每个类都有自己的虚拟“getSource”和“evaluate”函数,替换函数指针框架?(但这不只是将函数指针移到vtable中吗?)
我有很多代码。 不确定该精简哪些/发布哪些。请就其中某些方面提问,我将回答。
-O3
或其他)进行编译... - phimuemue