c++ - Linux中共享对象和普通库的区别

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

绑定(bind)到共享对象和普通对象之间的主要区别是什么?另外,这怎么可能在某些程序之间共享一些变量,并且知道我们的变量永远不会被另一个程序更改?

最佳答案

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

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

关于c++ - Linux中共享对象和普通库的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855954/

相关文章:

c++ - 为什么[]的重载函数在这里不起作用?

c++ - 可变参数函数 : Bad access with va_arg at iOS arm64

c - fgets c 标准库函数

linux - Matlab Gui 兼容性 - Linux 和 MacOS 之间的不同方面

c++ - 获取另一个文件中的数据条目数?

C++如何使用boost制作简单的sha256生成器?

C 语言中可以使用运算符来定义数组的大小吗?

c - 读取文本文件并用分隔符分隔它

linux - 守护进程 buildbot 启动

linux - Ubuntu 14.04 上的 lex 中无法识别的规则