【发布时间】:2013-06-12 03:50:48
【问题描述】:
假设我与这个函数共享库,其中“i”是一些全局变量。
int foo() {
return i++;
}
当我从多个进程调用此函数时,每个进程中“i”的值独立于其他进程。
这种行为是意料之中的。
我只是想知道链接器通常如何实现这种行为?据我了解,代码在进程之间共享,因此变量必须在使用该库的每个程序的所有地址空间中具有相同的虚拟地址。这种情况对我来说似乎很难实现,所以我想我在这里遗漏了一些东西,而且它的做法有所不同。
我能否获得有关此主题的更多详细信息?
【问题讨论】:
-
代码是共享的,而不是数据。动态链接器可能会为每个进程创建一个新的变量副本,但它不会文本(代码)段的副本。
-
@H2CO3 我很清楚这一点。但是,我要询问链接过程的详细信息。
-
好吧,如果您需要更多详细信息,我认为您应该看看实际的实现。 Linux 中的动态链接器和 Darwin (BSD/OS X/iOS) 中的动态链接器都是开源的。