gpt4 book ai didi

c++ - DLL 中的共享内存

转载 作者:可可西里 更新时间:2023-11-01 13:29:28 26 4
gpt4 key购买 nike

在 DLL 中共享内存是如何工作的?

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

int * data = 0;
int foo()
{
if (!data) data = new int(random());
return *data;
}

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

最佳答案

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

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

关于c++ - DLL 中的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705724/

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