功能地址一致吗?

时间:2012-07-05 12:02:55

标签: c function pointers function-address

这是在Windows 7 64位上使用C语言与VC ++ 2010。

有没有办法可靠,一致地访问函数的地址(c链接),以便它在程序的每次运行中都是相同的地址?

2 个答案:

答案 0 :(得分:4)

如果你在运行时获得了地址,它应该保持稳定运行。下次可能不同。

操作系统中有一些功能可能会导致您的可执行代码被加载到不可预测的地址(部分是为了安全,部分原因是两个DLL可能需要相同的基址)。

答案 1 :(得分:1)

不,因为无法保证每次大多数现代操作系统都会在同一地址加载该功能。在某些嵌入式设备上,如果您的链接器文件定义了该函数的固定地址,您可以使用它。

但为什么要这么麻烦?您可以像使用变量一样获取函数的地址:

void func(int a)
{
    a=5;
}

void main()
{
    // In case you don't know or don't care about the signature of the function.
    void* p = func;

    // In case you do care and might want to call the function
    // at some point through the pointer.
    void (*f)(int) = func;

    printf("%p %p",p, f);
}