Linux中共享对象和普通库之间的差异

时间:2010-10-04 14:01:12

标签: c++ c linux shared-libraries static-libraries

绑定到共享对象或普通对象之间的主要区别是什么?另外,如何在一些程序之间共享一些变量,并且知道我们的变量永远不会被另一个程序改变?

1 个答案:

答案 0 :(得分:2)

程序之间不会共享变量。 (虽然可以共享专门分配的共享内存,但这是一个“对象”,而不是C术语中的“变量”。)您感到困惑的是,磁盘上的支持是共享的内容进程之间,无论是主程序(静态链接还是动态链接)还是共享库文件,都是一样的。当内容与磁盘上的内容不变时,操作系统的虚拟内存实现负责为多个进程使用相同的物理内存页,并在写入时在运行时对页进行物理复制。所有这一切对您的应用程序都是透明的,它看到一个线性的32位或64位地址空间,只包含自己的代码和数据。

实际上,动态链接系统进行了大量的存储优化,将每个进程更改的数据隔离到几个页面,允许绝大多数页面在使用相同可执行文件的进程之间共享或相同的图书馆。