gpt4 book ai didi

c++ - 一个程序使用的DLL,里面声明的变量存放在哪里?

转载 作者:可可西里 更新时间:2023-11-01 10:01:19 24 4
gpt4 key购买 nike

我有一个程序(不是我的,没有源代码),它公开了一个接口(interface),因此我可以编写一个 DLL,它将被我的程序调用。现在我想知道当我在我创建的这个 DLL 中声明一些变量时,它将存储在什么内存空间中?

我的意思是,它只会位于 EXE 地址空间的内存空间中,对吗?但是,关于 EXE 的 DLL 是如何加载的?我认为一个 DLL 只在内存中加载过一次,那么这与我在我的 DLL 中创建局部变量有什么关系呢? (如对象、类等)

最佳答案

DLL 每个进程加载一次。曾几何时,DLL 在进程之间共享,但自从 Windows 3.1 走上渡渡鸟之路以来,情况就不同了。

您在 DLL 中声明的任何全局变量都将存储在数据页中。请注意,与 EXE 的全局变量不同的页面。

现在,如果您在堆上分配内存,您的分配是否与 EXE 混合取决于您使用的堆。如果 EXE 和 DLL 都使用与 DLL 链接的相同运行时,那么它们都将从同一个堆中获取内存。如果它们有不同的运行时,或者静态链接到运行时,它们将获得不同的堆。这变成了一个非常大的蠕虫 jar 头,所以我不会在这里继续。

关于c++ - 一个程序使用的DLL,里面声明的变量存放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6292741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com