如果我在我的应用程序加载的DLL中定义了一个全局变量,这个变量是否位于我的应用程序中定义的其他全局变量的同一内存区域(因此不直接在DLL中)?
答案 0 :(得分:3)
答案是肯定的。 MSDN报价: “加载DLL的每个进程都将其映射到虚拟地址空间”。 转到此link,您将找到您怀疑的答案。 祝你好运
答案 1 :(得分:3)
作为EXE的一部分加载的全局数据和作为DLL的一部分加载的全局数据都驻留在同一进程的虚拟内存空间中,但是在与EXE和DLL文件中定义的段对应的不同区域中。由于它们位于相同的虚拟内存空间中,因此DLL中的代码可以使用指向EXE传递给它的EXE全局指针,反之亦然。
答案 2 :(得分:0)
您的标记表示C ++,但答案可能还取决于平台/操作系统。在Windows下,每个进程都会复制数据。以下是MSDN Run Time Behavior article:
的摘录每次新流程尝试时 使用DLL,操作系统 创建DLL的单独副本 data:这称为进程附加。
在一个过程中,全球数据很好,......全球。