多次链接DLL时,导出的全局variables会发生什么变化?

假设我在头文件中有一个X.DLL和以下内容:

 extern __declspec(dllexport) int foobar; 

这个foobar全局variables是在一个实现文件中的X.DLL中定义的:

 int foobar = 1; 

现在假设我有两个DLL,链接到X.DLL A.DLLB.DLL ,以及使用A.DLLB.DLL的应用程序E.EXE

  +----> A.DLL ----+ | | E.EXE ----+ +----> X.DLL | | +----> B.DLL ----+ 

在这种情况下,在A.DLLB.DLL评估的expression式&foobar&foobar地址)是否保证具有相同的值? 换句话说,是X.DLL的全局variables存储了两次还是只有一个foobar实例在整个过程中? 另外,如果在加载时或通过调用LoadLibrary链接DLL,它是否有所作为?

在GCC的dllimport文档中,我也很困惑:

使用此属性的一个缺点是,指向标记为dllimportvariables的指针不能用作常量地址。

考虑到我上述的情况,我不太明白这个陈述的含意。

只有一个副本。 但是,一般来说,这是一个非常糟糕的主意,你会遇到很多问题。