相关疑难解决方法(0)

在进程和DLL之间共享全局/静态变量

我想在进程和进程调用的dll之间共享静态/全局变量.exe和dll位于相同的内存地址空间中.我不希望变量在其他进程之间共享.


详述问题:

说是有一个静态/全局变量xa.cpp.exe foo.exe和dll bar.dll都有a.cpp,所以变量x在两个图像中.

现在,foo.exe动态加载(或静态)bar.dll.然后,问题是变量x是否由exe和dll共享.

在Windows中,这两个人从不分享x:exe和dll将有一个单独的副本x.但是,在Linux中,exe和dll会共享变量x.

不幸的是,我想要Linux的行为.我首先考虑pragma data_seg在Windows上使用.但是,即使我正确设置了共享数据段,foo.exebar.dll从不共享x.回想一下,bar.dll加载到地址空间中foo.exe.但是,如果我运行另一个实例foo.exe,则x共享.但是,我不希望x被不同的进程共享.所以,使用data_seg失败了.

我可以通过在exe和dll之间创建一个唯一的名称来使用内存映射文件,我现在正在尝试.


两个问题:

  1. 为什么Linux和Windows的行为不同?任何人都可以解释更多吗?
  2. 在Windows上解决此问题最简单的方法是什么?

c c++ linux windows dll

22
推荐指数
4
解决办法
5万
查看次数

标签 统计

c ×1

c++ ×1

dll ×1

linux ×1

windows ×1