VC++共享數據段實現進程之間共享數據


當我寫了一個程序,我希望當這個程序同時運行兩遍的時候,兩個進程之間能共享一些全局變量,怎么辦呢?很簡單,使用VC\VC++的共享數據段。
#pragma data_seg("foo")//建立一個叫“foo”的數據段
#pragma comment(linker,"/SECTION:foo,RWS")//設置段foo的屬性為“可讀可寫共享”

int bar=0;//這些變量是共享的,不同的進程之間都可以訪問到。
int bar233=1;
int foobar=9;
int foobar233=233;

#pragma data_seg()//恢復到正常段繼續編程
像這樣弄好之后,相同EXE不同的進程之間對上面四個全局變量的訪問是共享的,比如某進程把bar的值改為2333333,那么在別的進程里面,bar的值都變成了2333333。
因為是同一個EXE,所以如果是不同的EXE,效果不同。比如a.exe有個共享數據段foo,b.exe也有共享數據段foo,雖然都有名字一樣的共享數據段,但是它們之間並不會互相產生影響,因為EXE不一樣。(EXE名不一樣或EXE內容不一樣)
大家可能有個問題,不同的EXE之間怎么做到共享數據?其實很簡單,我們用DLL實現這個功能。
讓DLL也弄一個這樣的共享數據段,然后讓不同的EXE一起載入這個DLL,就能實現不同的EXE之間共享數據了。

 

這就是R3與R0的區別,R0可以自由的共享進程以及內存。

R0看到的是物理內存,R3看到的是線性內存
此言差矣。。。
內核內存(WIN32的0x80000000以上和WIN64的0xFFFFF80000000000以上)也是虛擬內存。
如果要直接讀寫某段物理內存(比如0x123456),需要用MmMapIoSpace來把這段內存映射為虛擬內存才行。。。

https://www.0xaa55.com/forum.php?mod=viewthread&tid=436&extra=page%3D14

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM