zoukankan      html  css  js  c++  java
  • Linux下共享库中的全局变量,静态变量是否只有一份?

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

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

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

    结论是:不会。共享库的代码段,也就是每个函数,可能在内存中只有一份,但是全局变量,包括静态变量,全局静态变量在每个进程中都有独立的copy。所以不会造成上面所说的问题。
  • 相关阅读:
    JavaBean理解
    你应该掌握的七种回归技术
    回归分析步骤
    rsync命令(同步/备份数据)
    获取客户端访问的ip地址
    SSO单点登陆
    产品分类之属性选择
    linux的SVN搭建与同步
    php 实现 mysql数据表优化与修复
    php程序备份还原mysql数据库
  • 原文地址:https://www.cnblogs.com/super119/p/1996099.html
Copyright © 2011-2022 走看看