当动态链接共享库中的全局变量和静态变量时会发生什么?

当动态链接共享库中的全局变量和静态变量时会发生什么?

我试图理解当具有全局变量和静态变量的模块动态链接到应用程序时会发生什么。通过模块,我的意思是解决方案中的每个项目(我使用visual studio工作很多!)。这些模块内置于* .lib或* .dll或* .exe本身。

我知道应用程序的二进制文件包含数据段中所有单个转换单元(目标文件)的全局和静态数据(如果是const,则只读取数据段)。

  • 当此应用程序使用带有加载时动态链接的模块A时会发生什么?我假设DLL有一个全局和静态的部分。操作系统是否加载它们?如果是这样,他们在哪里被加载?

  • 当应用程序使用带有运行时动态链接的模块B时会发生什么?

  • 如果我的应用程序中有两个使用A和B的模块,则是如下所述创建的A和B的全局变量的副本(如果它们是不同的进程)?

  • DLL A和B是否可以访问应用程序全局变量?

(请说明你的理由)

引自MSDN

在DLL源代码文件中声明为全局的变量被编译器和链接器视为全局变量,但加载给定DLL的每个进程都获得其自身的DLL全局变量副本。静态变量的范围仅限于声明静态变量的块。因此,默认情况下,每个进程都有自己的DLL全局变量和静态变量。

这里

当动态链接模块时,可能不清楚不同的库是否有自己的全局变量实例或者是否共享全局变量。

谢谢。


眼眸繁星
浏览 1258回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP