我需要以常量形式保存程序中每个函数的一些信息。我想知道是否有可能将一个函数的常量放在它之前的代码内存中,因此如果通过函数指针调用一个函数,则可以通过减去函数指针的值来读取该信息。
为了进一步说明,我的代码内存应如下所示。
ConstantForFunc1
Func1:
....
ConstantForFunc2
Func2:
....
下面是我将如何读取该信息的示例代码
FuncPointer f = &Func2;
int constantForFunc2 = *((int*)(f - sizeof(int)));
请注意,使用哈希表对于我想要实现的目标来说太慢了,因此我需要一种非常快速的方法。所有这些修改,即插入常量和从中读取的代码,都是由我正在编写的编译器 channel 完成的,它修改了 LLVM IR。使用结构对于编译器来说太麻烦了,因为它必须修改很多代码。
最佳答案
你正在做的事情还没有意义:
也许你可以使用结构体?
struct example
{
int constantForFunc;
void (*ptrToFunc)();
};
//After declaring, maybe 3, functions
struct example funcList[3] = {{5, &func1}, {10, &func2}, {15, &func3}};
int currentFuncConstant=funcList[1].constantForFunc;
(*funcList[1].ptrToFunc)();
老实说,我没用过函数指针,可能有错误。
关于c++ - 如何将常量放入代码内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647413/