dll中定义的全局变量和主机软件的全局变量

发布于 2024-10-31 06:04:59 字数 80 浏览 4 评论 0原文

如果我在应用程序加载的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

看透却不说透 2024-11-07 06:04:59

作为 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.

失去的东西太少 2024-11-07 06:04:59

答案是肯定的。
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

烟凡古楼 2024-11-07 06:04:59

您的标签指示 C++,但答案也可能取决于平台/操作系统。在windows下每个进程都会制作一份数据的副本。以下是 MSDN 运行时行为文章的摘录:

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

在单个流程中,全局数据是很好的……全局的。

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:

Each time a new process attempts to
use the DLL, the operating system
creates a separate copy of the DLL's
data: this is called process attach.

In a single process global data is well,... global.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文