dll中定义的全局变量和主机软件的全局变量
如果我在应用程序加载的 DLL 中定义了一个全局变量,那么该变量是否与应用程序中定义的其他全局变量位于同一内存区域(因此不是直接在 DLL 中)?
If I have a global variable defined in a DLL that my application load, is this variable is located at the same memory region that my others global variable defined in my application (so not directly in the DLL) ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
作为 EXE 的一部分加载的全局数据和作为 DLL 的一部分加载的全局数据都驻留在同一进程的虚拟内存空间中,尽管位于与那些 EXE 和 DLL 文件中定义的段相对应的不同区域中。由于它们位于相同的虚拟内存空间中,DLL 中的代码可以使用 EXE 传递给它的指向 EXE 全局的指针,反之亦然。
Global data loaded as part of the EXE and global data loaded as part of the DLL both reside in the virtual memory space of the same process, though in different areas corresponding to the segments defined in those EXE and DLL files. Since they are in the same virtual memory space, code in the DLL can use a pointer to an EXE global that the EXE passes to it, and vice-versa.
答案是肯定的。
MSDN 引用:
“每个加载 DLL 的进程都会将其映射到其虚拟地址空间”。
转到此链接,您就可以了会找到你疑惑的答案。
祝你好运
The answer is yes.
MSDN quote:
"Every process that loads the DLL maps it into its virtual address space".
Go to this link and you'll find the answer to your doubt.
Good luck
您的标签指示 C++,但答案也可能取决于平台/操作系统。在windows下每个进程都会制作一份数据的副本。以下是 MSDN 运行时行为文章的摘录:
在单个流程中,全局数据是很好的……全局的。
Your tag indicates C++ but the answer may also be platform/OS dependent. Under windows each process will make a copy of the data. Here's a snippet from the MSDN Run Time Behavior article:
In a single process global data is well,... global.