即时编译算术运算序列

标签 c math compiler-construction

我用 C 编写了一个程序来使用公式生成分形,但速度很慢。基本上,您向渲染函数传递了一堆无符号字符数,这些数字指示函数将值插入堆栈或弹出它们并执行算术运算并将结果推回堆栈(有点像反向抛光符号)。问题是,程序正在读取这些函数编号,通过 if...else if...else if...else if...elseif... 来找到要执行的正确操作,然后推送和弹出每个像素中每次迭代的一堆值。通常只有一个公式(如 Mandelbrot)硬编码到渲染函数中,但这个程序是一个 DLL,我正在编写它是一个通用的分形渲染器。有什么方法可以编写一个小型编译器,在渲染开始之前读取公式并动态编译一个函数,然后渲染例程可以有效地重新使用该函数?毕竟,冯诺依曼架构的全部意义在于计算机可以修改自己的代码。

提前致谢!

最佳答案

如果可以选择使用 C++,我建议您尝试使用 LLVM - 使用他们的 IRBuilder 将函数转换为 LLVM IR,运行优化过程,然后使用 LLVM JIT 在运行时编译函数

http://llvm.org/docs/tutorial/LangImpl4.html

关于即时编译算术运算序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336398/

相关文章:

c - C 的幂?

c++ - 验证数学方程 C++

在 clang 中使用 long double 进行计算 – 编译器错误?

c - strncmp 正确使用

c - 如何通知工作线程有一些工作需要完成?

java - 使用 Eclipse 创建 java 可执行文件

javascript - ChickenScheme Spock JavaScript 编译器安装问题

c - 包含字符和整数的数组

math - log-sum-exp 技巧为什么不递归

javascript - 如何在 Javascript 中模拟 Google Sheet 乘法公式的结果?