在C ++中,我必须在大表的每个单元格上进行一些用户定义的操作。 由于表的大小,我不想使用解释指令,而是在运行时编译我将在每个单元格上调用的函数。
用户定义的操作非常简单:
if ((state1 && state2) || state3) then change_a_value_in_memory
这就是我不需要使用LLVM或其他JIT库的原因。
我毫不犹豫地使用mmap并直接在十六进制中添加代码。
我想知道它是否存在更好的解决方案,或者,如果没有,我可以在哪里找到C ++函数代码的基本格式,直接将其写入内存。
谢谢,对不起我的英文:/
答案 0 :(得分:1)
这不是最优雅的,但它始终有效:使用函数的C ++代码生成文件,使用system()
调用编译器,使用dlopen加载生成的.so文件,然后使用该函数!
这需要一些时间(由于编译器调用),但是如果保留该函数并维护已有函数的数据库,则可以保存编译量。