PIC共享库中的不同功能地址

时间:2015-05-16 20:15:46

标签: c shared-libraries dynamic-linking fpic

我有一个文件ptr.c

a@po:~/code/link_load$ cat ptr.c
int test()
{
     printf("in test1 %p\n",&test);
    return 0;
}

我创建了一个共享库

a@po:~/code/link_load$ gcc -fPIC -c ptr.c
a@po:~/code/link_load$ gcc -shared -o libptr.so ptr.o                                                                       

然后我从两个程序p1.c和p2.c调用test,在调用test之后调用test和p1.c sleeps以确保两个可执行文件一起处于活动状态。

由于文本部分是共享的,我希望测试函数的地址相同。

但事实并非如此,为什么?

编辑:我猜打印的地址是虚拟地址。 如果这是真的那么它映射到实际地址,对于p1和p2都是相同的。

1 个答案:

答案 0 :(得分:2)

单个文件(例如,库的文本部分)可以映射到多个进程中的不同虚拟地址,同时仍然是共享的。这就是这里发生的事情。