DLL中的共享内存

DLL中的共享内存,第1张

概述DLL中的共享内存

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

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

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

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

有没有比parsing/ proc / self / maps找出内存保护更好的方法?

无效的 *** 作数到二进制*(有'ab {aka结构a}'和'ab * {aka结构a *}')

C ++跳转钩子

将一个大的C项目从Unix移植到windows

如何防止CListCtrl闪烁?

确定windows计算机完全启动并变为响应时

会杀死进程/线程释放互斥?

每当调用malloc / free时输出到stderr

如何用你的应用程序打开一个JPG文件?

MinGW可以毫不费力地复制大多数Unix系统调用吗?

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

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

你在这里误解了两个不同的概念 – 在这个意义上,dll共享内存,所有没有(永远)会改变的东西都是共享的(物理的)。 这是保存你的RAM导致在DLL中的很多数据是代码和其他常量数据,所以系统只使用它的一个副本,不管有多少进程使用它。 这在系统级别上很重要 – 从应用程序的角度来看,根本没有共享。

然而,像这里所描述的那样的内部数据不是在进程之间共享的 – 每个进程都有自己的副本。 如果您有兴趣在进程之间共享内存,则需要其他机制。 您可能有兴趣创建命名的共享内存 。

进程B将拥有自己独立的内存空间,与进程A无关。 data变量将在进程空间B内创建。

总结

以上是内存溢出为你收集整理的DLL中的共享内存全部内容,希望文章能够帮你解决DLL中的共享内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存