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

时间:2009-07-28 12:11:07

标签: c++ memory static shared-libraries

正如所讨论的here,静态变量存储在.BSS或.DATA段中。

如果静态变量位于动态链接库中的函数内,那么这个内存存储在何处?此变量的存储是否在链接时在链接过程的.BSS或.DATA段中分配?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

是。不同类型的静态变量之间的差异是:

  • 范围

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

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