Linux下共享库中的全局变量,静态变量是否只有一份?

当有多个程序使用同一个共享库的时候,我们都知道,多个程序有多个进程,但是共享库在内存中只有一份。所以问题来了:如果我在共享库中定义了全局变量,那 么全局变量是不是也只有一份?如果是这样,那么当多个进程都在使用这个共享库的时候,就有问题了。比如:我们在共享库中定义了一个全局变量 server_inited,用来表示一个socket server是否已经启动成功了,如果这个变量是TRUE,那么,下次用户调用启动server的函数的时候,这个函数一check这个变量,发现已经是 TRUE了,就不会再启动server了。这样就导致了一个进程调用过了一次启动server的函数之后,其他进程再调用这个函数就没有效果了。而很明 显,这样是不行的。

如果真的象上面所说,那么在编写共享库的时候,就不能使用任何全局变量了。这会非常的麻烦。

为此,我写了两个程序测试了一下,一个TestLib用来生成共享库,一个测试程序用来测试。

结论是:不会。共享库的代码段,也就是每个函数,可能在内存中只有一份,但是全局变量,包括静态变量,全局静态变量在每个进程中都有独立的copy。所以不会造成上面所说的问题。
原文地址:https://www.cnblogs.com/super119/p/1996099.html