内存的COPY ON WRITE机制

刚了解到。赶快记下来。

每个程序都有自己的数据段,代码段。。。

补充:dll有自己的数据段,但没有自己的堆栈。

一个dll,被很多程序调用,为什么代码段共享,数据段不共享?就是因为 内存的COPY ON WRITE 机制

程序1调用这个dll,运行过程中,dll的数据段肯定会改变,那内存就会被COPY一份,原来的依然存在不受影响。

程序2调用这个dll,仍然用的是最开始的数据段,他往里写时再COPY一份,这就保证了两个程序互不影响。

而代码段是一般不会被更改的,所以才来的代码段共享这个概念。

如果用hook等技术,把代码改了,代码同样会被COPY一份之后再改,所以不会影响其它的进程,只会影响你改的进程。

 

要实现进程1进程2数据共享,只能定义自己的段 ,全局变量和static变量因为内存COPY机制,不会起作用的。

自己的段的定义方法:

 #pragma data_seg("share_data_seg")

    定义数据(必须初始化)

 #pragma data_seg()

或者

#pragma bbs_seg("share_data_seg")

  定义数据(不必初始化)

#pragma bbs_seg()

然后定义他的访问机制为rws: 表示具有读,写和共享属性

#pragma comment(linker, "/section: share_data_seg rws")

也可以给工程添加def文件,在里边定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值