gpt4 book ai didi

c - Linux 中的两个不同进程如何调用一个共享库文件?

转载 作者:IT王子 更新时间:2023-10-29 00:21:17 25 4
gpt4 key购买 nike

在 Linux 中,我有一个名为 foo.so 的共享库文件当我执行两个都使用 foo.so 的不同进程 p1、p2 时。这个 foo.so 是否被这两个过程重叠了?

最佳答案

在基于 Unix 的系统(包括 Linux)上,code segment (.text)可以在多个进程之间共享,因为它是不可变的。你提到这是重叠的吗?

基本上,每个包含静态数据(例如全局变量)的共享库都有一个 Global Offset Table (GOT) .在共享库上,所有对静态数据的引用(想想全局变量)都是通过 GOT 发生的(它们是间接的)。因此,即使代码段在多个进程之间共享,每个进程都有其对共享库其他段的独占映射,包括各自的 GOT,其条目相应地重新定位。

简而言之,进程之间只共享代码,不共享数据。但是,我认为常量可能是一个异常(exception),具体取决于编译标志。

我还推荐以下书中的第 10 章,动态链接和加载:Linkers and Loaders .

关于c - Linux 中的两个不同进程如何调用一个共享库文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com