代码之家  ›  专栏  ›  技术社区  ›  nagul

动态链接库(C/C++)中静态变量的行为

  •  7
  • nagul  · 技术社区  · 15 年前

    如讨论 here 静态变量存储在.bss或.data段中。

    如果静态变量位于动态链接库中的函数内,那么该内存存储在哪里?链接时,此变量的存储是否在链接进程的.bss或.data段中分配?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Rob K    15 年前

    静态变量将最终出现在dll文件的.bss或.data节中。链接到dll的可执行文件可能甚至不知道它存在。当exe加载dll时,系统为其设置dll的数据部分,然后调用dllmain()。这就是dlls静态值出现并初始化的时候。

        2
  •  1
  •   AProgrammer    15 年前

    对。不同类型静态变量之间的区别是:

    • 范围

    • 动态初始化的初始化时间。

    实现(注意,BSS和数据段是实现细节)通常是相同的。为了确保动态初始化静态函数变量的正确初始化,一种方法是添加一个表示需要动态初始化的布尔值。