我用C语言写了一个程序,用公式生成分形,但速度非常慢。基本上,你向呈现函数传递一堆无符号的字符数字,这些数字指示函数将值推入堆栈或将它们弹出,并执行and算术运算,然后将结果推回堆栈(有点像反向抛光符号)。问题是,程序正在读取这些函数的编号,通过if...else if...elseif...找到要执行的正确操作,并为每个像素中的每次迭代推送和弹出一堆值。通常会有一个公式(像Mandelbrot)硬编码到渲染函数中,但这个程序是我编写的一个DLL,它是一个通用的分形渲染器。有没有办法写一个小编译器,在渲染开始之前读取公式,并动态编译一个函数,然后高效地被渲染例程重用?毕竟,冯·诺依曼体系结构的全部意义在于,计算机可以修改自己的代码。
提前感谢!
发布于 2012-07-05 07:51:38
在C中没有自修改代码的概念,任何试图将控制传递给“数据”内存中的数据块的尝试,例如,通过将数据指针转换为函数指针,都是未定义的行为。这个模型可以让你在非vov-neuman计算机上用C语言编程。
也就是说,您可以通过将if-then-else语句序列替换为函数指针或switch语句来优化您的RPN代码,使其运行得更快。您还可以将目标函数编程到动态库中,在运行时读取它,并在呈现中使用它。
发布于 2012-07-15 08:48:51
如果可以选择使用C++,我建议您尝试使用LLVM -使用它们的IRBuilder将函数转换为LLVM,运行优化过程,然后使用LLVM在运行时编译函数
http://llvm.org/docs/tutorial/LangImpl4.html
https://stackoverflow.com/questions/11336398
复制相似问题