我正在创建脚本语言,首先解析代码 ,然后将函数(执行代码)复制到一个缓冲区\内存作为解析的代码。在运行时编译函数C++编译时编译的函数的数量
有一种方法来复制功能的二进制代码来缓冲,然后执行整个缓冲区? 我需要一次执行所有的功能以获得更好的性能。
要明白我的问题,以最好的,我想要做这样的事情:
#include <vector>
using namespace std;
class RuntimeFunction; //The buffer to my runtime function
enum ByteCodeType {
Return,
None
};
class ByteCode {
ByteCodeType type;
}
void ReturnRuntime() {
return;
}
RuntimeFunction GetExecutableData(vector<ByteCode> function) {
RuntimeFunction runtimeFunction=RuntimeFunction(sizeof(int)); //Returns int
for (int i = 0 ; i < function.size() ; i++) {
#define CurrentByteCode function[i]
if (CurrentByteCode.Type==Return) {
runtimeFunction.Append(&ReturnRuntime);
} //etc.
#undef
}
return runtimeFunction;
}
void* CallFunc(RuntimeFunction runtimeFunction,vector<void*> custom_parameters) {
for (int i=custom_parameters-1;i>=0;--i) { //Invert parameters loop
__asm {
push custom_parameters[i]
}
}
__asm {
call runtimeFunction.pHandle
}
}
麦克·鲍尔(LuaJIT2的)评论(http://article.gmane.org/gmane.comp.lang.lua.general/75426)都非常值得一读。 – ephemient 2012-07-29 01:29:57
谢谢,但我不需要在运行时生成代码。我需要结合一些函数(也使用const参数)。我只是不想见到大会,我讨厌它。 – 2012-07-29 01:32:20
你的目标(更好的表现,不学会集会)是相互矛盾的。实际上,为了获得良好的性能,您需要比汇编更低的级别,并了解高速缓存行为,流水线,数据依赖性等。 – 2012-07-29 03:41:42