DLL中的共享内存

use*_*654 5 c c++ windows dll

共享内存如何在DLL中运行?

当DLL附加到进程时,它使用与进程相同的内存地址.假设我们在DLL中有以下函数:

int * data = 0;
int foo()
{
    if (!data) data = new int(random());
    return *data;
}
Run Code Online (Sandbox Code Playgroud)

当进程A调用此函数时,它会创建新对象(int)并返回其值.但是现在进程B附加了这个DLL.它调用foo()但我不明白它data是如何工作的,因为它正处于进程中'一个内存空间.B怎么能直接使用它?

sel*_*bie 6

你是对的,默认情况下,DLL不会跨进程共享内存.在您的示例中,进程A和B都将获得单独的"数据"实例.

如果您的设计中要在使用该DLL的所有进程中共享DLL中的全局变量,则可以使用此处所述的共享数据段.您可以通过共享数据段共享预先声明的数组和值类型,但绝对不能共享指针.

  • "Win32 DLL被映射到调用进程的地址空间.默认情况下,使用DLL的每个进程都有自己的所有DLL全局和静态变量的实例." 这就是我想要的.谢谢! (3认同)