c++ - 如何将常量放入代码内存

标签 c++ c linux llvm x86-64

我需要以常量形式保存程序中每个函数的一些信息。我想知道是否有可能将一个函数的常量放在它之前的代码内存中,因此如果通过函数指针调用一个函数,则可以通过减去函数指针的值来读取该信息。

为了进一步说明,我的代码内存应如下所示。

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/

相关文章:

c++ - 在 `,' token 之前应为 `;' 或 '{'(C++,无效与 windows.h)

c 在结构中定义不同大小的数组

linux - 如何通过 SSH bash 脚本在远程服务器上进行 cd?

linux - 查找并删除多个文件中的一行

c++ - 寻求对内联命名空间的澄清

带有洪水填充的 C++ 段错误

c++ - 将 QPixmap 移动到 QLabel 但不复制

c - 赋值原因不明确会丢弃 volatile 限定符

c - 使用单个函数调用写入多个文件描述符

linux - 如何在awk中使用循环