【发布时间】:2013-02-01 13:31:24
【问题描述】:
我需要在我的程序中以常数的形式保存一些关于每个函数的信息。我想知道是否可以将函数的常量放在代码内存中的前面,所以如果通过函数指针调用函数,则可以通过减去函数指针的值来读取该信息。
为了进一步说明,我的代码记忆应该如下所示。
ConstantForFunc1
Func1:
....
ConstantForFunc2
Func2:
....
以下是我如何阅读该信息的示例代码
FuncPointer f = &Func2;
int constantForFunc2 = *((int*)(f - sizeof(int)));
请注意,使用哈希表对于我想要实现的目标来说太慢了,所以我需要一个非常快速的方法。所有这些修改,即插入常量和从中读取的代码,都是由我正在编写的编译器传递完成的,它修改了 LLVM IR。使用结构对于编译器传递来说太麻烦了,因为它必须修改大量代码。
【问题讨论】:
-
什么。不,你需要描述一个问题而不是描述一个解决方案。
-
我认为你不能以便携的方式做到这一点。另外,为什么
- 4?你有没有想过,指针可以有不同的大小? -
只有在编写嵌入式引导加载程序或非易失性存储器编程算法时,这样的代码才有意义。这就是你在做的吗?
-
编译器会优化布局,因此在代码文件中的函数之前放置一个常量并不能保证它会在编译后的二进制文件中存在。
-
典型的“XY”问题,你有一个问题,X,你认为应该通过做 Y 来解决,所以你问如何做 Y。描述你真正想要达到的目标,我们可能会有所帮助。