在DLL中定义的全局变量和宿主软件的全局变量

global variable defined in a dll and global variable of the host software

本文关键字:全局变量 宿主 软件 DLL 定义      更新时间:2023-10-16

如果我在应用程序加载的DLL中定义了一个全局变量,这个变量是否位于与应用程序中定义的其他全局变量相同的内存区域(因此不直接在DLL中)?

作为EXE的一部分加载的全局数据和作为DLL的一部分加载的全局数据都驻留在同一进程的虚拟内存空间中,尽管在这些EXE和DLL文件中定义的段对应于不同的区域。由于它们位于相同的虚拟内存空间中,DLL中的代码可以使用指向EXE传递给它的EXE全局指针,反之亦然。

答案是肯定的。MSDN报价:每个加载DLL的进程都将它映射到它的虚拟地址空间。去这个链接,你会找到你的疑问的答案。祝你好运

你的标签表明c++,但答案也可能是平台/操作系统相关的。在windows下,每个进程都会复制一份数据。以下是MSDN运行时行为文章中的一个片段:

每次一个新的进程尝试使用DLL,操作系统创建DLL的单独副本数据:这叫做进程附加。

在单个进程中全局数据是好的,…全球。