我正在創建腳本語言,首先解析代碼 ,然後將函數(執行代碼)複製到一個緩衝區\內存作爲解析的代碼。在運行時編譯函數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