共享库中的全局变量

时间:2015-06-07 16:11:02

标签: c shared-libraries allocation

您知道如何在共享库中共享全局变量吗?

我遇到了问题。 我在我的头文件中声明

int a;

我将在一些C文件中使用它,而不是将其编译为共享库。 但是文件中A的更新似乎没有被共享,变量的变化也无效。

我在一些帖子中读到这是因为数据段没有共享,但我需要它。 你知道这是怎么做到的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我在一些帖子中读到这是因为数据段未共享,   但是,我需要它。你知道这是怎么做到的吗?   数据段确实没有共享。对不起,但这就是它的工作方式。

许多现代操作系统将共享库加载到内存中,因此使用它的程序可以读取其内存位置的值,直到执行写入为止。

当它这样做时,操作系统可以应用COW(写入时复制)策略,并专门为使用试图修改它的程序创建库内存的精确副本。 / p>

因此,其他程序无法看到第一个程序所做的任何更改。

如果要在进程之间共享内存,则必须参考操作系统。例如,Linux使用shared memory IPC,您必须使用它来实现您想要的API。不要气馁,这很简单。