GNU libjit是否意味着在运行时将一段代码转换为可执行的代码(例如,x86的机器代码)?我看不出libjit tutorial中的例子是如何显示的。有任何想法吗?感谢。
答案 0 :(得分:1)
不是一步。可能更适合说libjit可以在内存中生成可执行代码,如果给出该代码应该做什么的低级描述。这就是对教程中jit_insn_add()
等函数的调用的全部内容; libjit转换一系列名义指令(例如,“将寄存器1添加到寄存器2”,“如果寄存器3为零,则执行下一个指令块”)将其送入内存中的字节序列可以由CPU运行以执行这些操作。
如果要将某些代码的文本表示(例如,字符串a = b + c;
)转换为某种可执行代码,那将是一个完全不同且无关的任务。所涉及的所有内容的完整解释超出了本网站答案的范围,但是正式编译器实现的一般性研究将是我的建议起点。 (暂时忽略您打算在运行时执行此代码,而不是将其编译为可执行文件;这对所使用的技术几乎没有什么影响。)关于该主题的优秀教科书是“Compilers: Principles, Techniques, and Tools”,又名。 “龙书”。