关于DLL在内存中的映射

这篇博客探讨了动态链接库(DLL)在内存中的加载机制,指出每个进程使用DLL时,通常从同一内存地址加载。然而,当需要修改DLL中的全局变量时,系统会为每个进程创建独立的存储空间。为了实现DLL中的数据在所有进程中共享,可以创建共享的“节”,并通过特定的链接器指令或DEF文件设置节的权限为读写共享。示例代码展示了如何定义和设置DLL中的共享数据及权限。
摘要由CSDN通过智能技术生成

一般来说,动态链接库在内存中只会加载一次

每个进程需要调用到此动态链接库的时候,都会从这一个内存地址中加载

但,如果进程需要改动动态链接库中的信息,哪怕是全局变量,系统也会从内存中重新分配出一小块区域,来进行这些变量的存储

那么与之对应的,每一个进程,所修改的动态链接库,只能是自己的一份,不能在所有进程中共享的

如果想在所有进程中共享一份动态链接库数据,则需要在DLL中设置一个共享的“节”

以下代码是定义一个节并给节命名为MySec,HWND g_hWnd=NULL;为将放在节中的数据

#pragma data_seg("MySec")
HWND g_hWnd=NULL;
#pragma data_seg()

以下代码是定义节的权限等,RWS:r为读,w为写,s为共享

#pragma comment(linker,"/section:MySec,RWS")

若不用此代码,也可在def文件中添加如下定义,所起作用相同

SEGMENTS
MySec    READ WRITE SHARED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙行天下01

你的鼓励将是我的最大写作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值