永发信息网

为什么说段是内存映射的一种方式?

答案:1  悬赏:20  手机版
解决时间 2021-04-23 09:47
为什么说段是内存映射的一种方式?
最佳答案
在Win32中,每个进程有自己的地址空间,一个进程不能轻易地访问另一个进程地址空间中的数据,所以不能像16位Windows那样做。Win32系统允许多个进程(运行在同一计算机上)使用内存映射文件来共享数据。实际上,其他共享和传送数据的技术,诸如使用SendMessage或者PostMessage,都在内部使用了内存映射文件。



这种数据共享是让两个或多个进程映射同一文件映射对象的视图,即它们在共享同一物理存储页。这样,当一个进程向内存映射文件的一个视图写入数据时,其他的进程立即在自己的视图中看到变化。但要注意,对文件映射对象要使用同一名字。



以下是一段使用内存映射文件的代码:



创建:



HANDLE s_hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, 4*1024,_TEXT("MyCustShareData"));

(此函数寻找一个名字为"MyCustShareData"的内存映射文件,不存在则创建,存在则返回已有的句柄,所以当返回值不为空的话,还须检查GetLastError,如果得到ERROR_ALREADY_EXISTS,则表明该名字的内存映射文件已经存在,并未创建成功)



读写:



HANDLE hFile = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, _TEXT("MyCustShareData"));//最后一个参数为名字,必须与创建的相同



if(hFile != NULL)

{

LPVOID lpView = MapViewOfFile(hFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);//将内存映射文件的一个视图映射到当前的地址空间

if ((int *)lpView != NULL)

{

int sheardata = (int*)lpview; //读

(int *)lpview = 88; //写

}

UpmapViewOfFile((LPVOID) lpview);

}

CloseHandle(hFile);



其中MapViewOfFile的原型如下所示:

LPVOID MapViewOfFile(

HANDLE hFileMappingObject, // 映射文件对象的句柄

DWORD dwDesiredAccess, // 访问模式

DWORD dwFileOffsetHigh, // 位移的高位

DWORD dwFileOffsetLow, // 位移的低位(与前一个参数一起构成64位的位移量)

SIZE_T dwNumberOfBytesToMap // 映射量(单位为Byte,当设为0时表示映射整个文件)

);



您所提到的mapviewoffileEx函数的原型如下所示:

LPVOID MapViewOfFileEx(

HANDLE hFileMappingObject,

DWORD dwDesiredAccess,

DWORD dwFileOffsetHigh,

DWORD dwFileOffsetLow,

SIZE_T dwNumberOfBytesToMap,

LPVOID lpBaseAddress

);



其中前五个参数的含义同上,第六个参数给出一个调用映射文件的进程的地址,要求文件映射从该地址开始。这个值必须是一个系统内存分配的最小粒度的整数倍,否则此函数调用失败。要获得内存分配的粒度,可以调用GetSystemInfo函数。如果指定的内存地址没有足够的空间,则函数也失败。



如果此参数的值设为NULL,则操作系统选择从何地址开始进行文件映射,这样,函数的功能与MapViewOfFile相同
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
衣服上弄上油怎么办?
南通哪里有正宗泰迪熊狗狗卖
想打一部动漫 !类似高达的!女主角同男主角
dnf新的防沉迷用户怎么设置二级密码
从沙井107国道到西乡中学,到了流塘路口(西乡
浪漫玫瑰园什么时候能维护好?
诛仙2飞升后天音鬼道合欢哪个强啊?
怎么获取搜搜经验
小孩生病祝福的话,祝福自己小孩健康成长的一
衡量一个学生是否优秀难道只是凭成绩吗
下载电影的方法.
上海返费兑现承诺的中介,不要骗我这对我很重
QQ空间相册封面拼图制作
写赞美太阳的诗歌,赞美太阳的小诗
梦到自己睡床大裂.又自己修夏
推荐资讯
丁丁网的网址是什么?
WP7手机怎么设置关闭重力感应而产生的屏幕方
暗示表达单身的诗词,谁知道关于孤独寂寞的诗
有谁知道这家公司的 英潍捷基(上海)贸易有
qq空间flash模块应该复制哪个地址?
宜昌市西陵区窑湾街道茶庵村村民委员会地址在
今年的护士计算机考试什么时候开始报名
自由幻想YS穿龙套好还是虎套好 哪个加的血多
从广东中山寄快递到衡阳十多天了怎么还收不到
圆通快递有没有820开头的
五个月的宝宝打预防针回来就发烧不拉肚子,这
“国十条”与“金融九条”哪项措施更能消解金
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?