绑定(bind)到共享对象和普通对象之间的主要区别是什么?另外,这怎么可能在某些程序之间共享一些变量,并且知道我们的变量永远不会被另一个程序更改?
最佳答案
程序之间永远不会共享变量。 (尽管可以共享专门分配的共享内存,但这是一个“对象”,而不是 C 术语中的“变量”。)您感到困惑的是磁盘上的 backing 是共享的进程之间,无论是主程序(静态或动态链接)还是共享库文件,都是一样的。当内容与磁盘上的内容相同时,操作系统的虚拟内存实现负责为多个进程使用相同的物理内存页面,并在运行时制作页面的物理拷贝(如果它们被写入)。所有这些对您的应用程序都是透明的,它看到一个线性的 32 位或 64 位地址空间,其中只包含它自己的代码和数据。
在实践中,动态链接系统进行了一些存储优化,将每个进程将更改的数据隔离到几页,允许绝大多数页面在使用相同可执行文件的进程之间共享,或者相同的库。
关于c++ - Linux中共享对象和普通库的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855954/