我想在进程和进程调用的dll之间共享静态/全局变量.exe和dll位于相同的内存地址空间中.我不希望变量在其他进程之间共享.
详述问题:
说是有一个静态/全局变量x
在a.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.exe
也bar.dll
从不共享x
.回想一下,bar.dll
加载到地址空间中foo.exe
.但是,如果我运行另一个实例foo.exe
,则x
共享.但是,我不希望x
被不同的进程共享.所以,使用data_seg
失败了.
我可以通过在exe和dll之间创建一个唯一的名称来使用内存映射文件,我现在正在尝试.
两个问题: