Linux下共享库中的全局变量,静态变量是否只有一份?
2015-05-20 16:13
351 查看
当有多个程序使用同一个共享库的时候,我们都知道,多个程序有多个进程,但是共享库在内存中只有一份。所以问题来了:如果我在共享库中定义了全局变量,那 么全局变量是不是也只有一份?如果是这样,那么当多个进程都在使用这个共享库的时候,就有问题了。比如:我们在共享库中定义了一个全局变量 server_inited,用来表示一个socket server是否已经启动成功了,如果这个变量是TRUE,那么,下次用户调用启动server的函数的时候,这个函数一check这个变量,发现已经是 TRUE了,就不会再启动server了。这样就导致了一个进程调用过了一次启动server的函数之后,其他进程再调用这个函数就没有效果了。而很明
显,这样是不行的。
如果真的象上面所说,那么在编写共享库的时候,就不能使用任何全局变量了。这会非常的麻烦。
为此,我写了两个程序测试了一下,一个TestLib用来生成共享库,一个测试程序用来测试。
结论是:不会。共享库的代码段,也就是每个函数,可能在内存中只有一份,但是全局变量,包括静态变量,全局静态变量在每个进程中都有独立的copy。所以不会造成上面所说的问题。
from: http://www.360doc.com/content/11/1005/19/1317564_153613013.shtml
显,这样是不行的。
如果真的象上面所说,那么在编写共享库的时候,就不能使用任何全局变量了。这会非常的麻烦。
为此,我写了两个程序测试了一下,一个TestLib用来生成共享库,一个测试程序用来测试。
结论是:不会。共享库的代码段,也就是每个函数,可能在内存中只有一份,但是全局变量,包括静态变量,全局静态变量在每个进程中都有独立的copy。所以不会造成上面所说的问题。
from: http://www.360doc.com/content/11/1005/19/1317564_153613013.shtml
相关文章推荐
- Linux下共享库中的全局变量,静态变量是否只有一份?
- Linux下共享库中的全局变量,静态变量是否只有一份?
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- 当调用的DLL中有全局变量时调用它的多个实例是否共享同一个全局变量?????
- 静态函数里定义的变量,不为所有对象共享,类的静态变量和类外全局变量区别,静态函数和普通函数区别
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈
- linux动态链接库全局变量共享问题&DLL共享数据段
- 静态的属性: 只有"一份"(相当于全局变量)
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈
- Linux共享库(动态库)与进程之间全局变量是无法共享的
- linux线程使用读写锁共享全局变量
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】
- 当调用的DLL中有全局变量时调用它的多个实例是否共享同一个全局变量
- 当调用的DLL中有全局变量时调用它的多个实例是否共享同一个全局变量
- 关于全局变量,如何被多个.c文件共享问题
- C语言中,局部变量、全局变量、静态变量、堆、栈的内存地址
- 全局共享变量(Android)
- Java多线程共享全局变量问题
- C++ 全局变量 静态变量 全局函数 静态函数
- 多线程中对全局变量(整型类型)是否需要同步操作