c++ - .so 库中的全局变量

标签 c++ c linux shared-libraries

假设库 x.so 有一个全局变量 y,它由库中的函数(例如 fun1)操作。

当进程 p1 加载到 RAM 中时,其代码正在使用库 x.so 中的函数 fun1,库 x.so 将由 ld.so 加载到 RAM(如果尚未存在),并且函数符号在程序开始执行之前得到解析。

现在在哪里创建这个全局变量。是否在进程 p1 中?

当另一个进程 p2 也使用 fun1(正在对 y 进行操作)时会发生什么?

最佳答案

进程将获得 y 的私有(private)拷贝,当您调用 exec 时,它将被新拷贝替换。它将驻留在库的数据段中。

关于c++ - .so 库中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071543/

相关文章:

c - 数组的整数子集的总和,获取所有结果而不是第一个

c - strcmp() 和 strcat() 序列

linux - svn 合并单个文件。添加新文件

linux - Matlab 二进制文件不接受其在 shell 中的输入值

c++ - range-v3 和 view_facade,不能为 ForwardRange 建模

c# - 计算机视觉 : Segmentation of XRay image vertebrae detection

c++ - 访问命名空间中的枚举

C:为什么我仍然可以访问空数组?

c - linux 内核函数 page_address()

android - 如何使用 QtCreator 为 Android/iOS 构建基于 CMake 的项目