如何在编译时查找C全局变量的地址

时间:2014-04-23 15:40:36

标签: c compilation linker

我正在做一些代码生成。是否有可能在编译时找到全局C变量的未来地址?

假设C文件中有一个全局变量:

const char[] bytecode = "generated bytecode goes here";

之后,我需要在编译时添加指向bytecode的代码:

const char* ptrInsideBytecode = 0x1234 + offset; 
// 0x1234 should be the address of bytecode

只能引用字节码字段,指针必须是固定的。

我知道myVar在编译和链接后会处于某个固定的位置,所以这应该是可能的。如何在编译之前找到bytecode的确切地址?

3 个答案:

答案 0 :(得分:2)

没有办法做到这一点,因为编译器必须执行求和才能知道值是什么,但是在链接器运行之前,地址将不会被知道。

根据您的平台,您可以使用链接描述文件将字节码放在内存中的固定位置。如果您使用的是没有操作系统的微控制器,这种情况可能会有效。

答案 1 :(得分:0)

它在编译时没有地址;要知道为什么,你可以在不同的机器上编译它,而不是执行它的那个(或更多!)。

答案 2 :(得分:0)

const char bytecode[] = "generated bytecode goes here";

// After that, I need to add code pointing to bytecode at compile time:
#define offset 6

const char *ptrInsideBytecode = bytecode + offset;

// the address you want >>>-----^^^^^^^^