zoukankan      html  css  js  c++  java
  • VC++共享数据段实现进程之间共享数据

    当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VCVC++的共享数据段。
    #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

  • 相关阅读:
    通过jsonp解决ajax的跨域请求问题
    为php安装redis扩展模块并测试
    浅谈使用 PHP 进行手机 APP 开发(API 接口开发)(转)
    touch事件记录
    jquery mobile 问题
    background总结,转自http://www.daqianduan.com/3302.html
    博客收集
    css3 border-radius 总结
    css3 box-shadow 总结
    angular 重置表单
  • 原文地址:https://www.cnblogs.com/findumars/p/5557218.html
Copyright © 2011-2022 走看看