Windows共享内存段 [英] Windows shared memory segments

查看:13
本文介绍了Windows共享内存段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在谷歌上搜索了一下,还没有找到一个明确的答案,所以我希望有人能对Windows和Linux中的共享内存段有一些了解。

在Linux中,有两种为IPC创建共享内存的方法:共享内存段(shmget等)和内存映射文件(Mmap)。根据我的简单理解,mmap要求您在操作系统中的某个地方有一个要映射的实际文件,而共享内存段只是内存中可以由进程附加的基于名称的段。

在Windows中,似乎只有内存映射文件的等价物,您必须有一个实际的文件在某个地方浮动。

我的问题是:这实际上是Windows中唯一一种共享内存,还是它有用于创建非基于文件的共享内存段的API。

推荐答案

Unixmmap()接口实际上等同于CreateFileMapping/MapViewOfFileWindows接口。两者都可以映射文件和/或创建由交换设备(如果有)支持的共享(匿名)映射。事实上,当请求的内存足够大时,glibc使用匿名mmap()来实现malloc()

Windows支持另一种机制-可执行文件中的共享数据部分,这是Linux中没有实现的。首先,使用#pragma data_seg(".somename")创建一个命名数据节,并将共享变量放入其中。然后使用以下选项告诉链接器将该部分标记为读/写/共享:/SECTION:.somename,RWS。整个过程在MSDN中描述。这仅适用于相同模块的副本,无论是EXE文件还是DLL文件。相同模块表示相同文件系统位置中的相同文件:从相同可执行文件的不同副本创建但位于不同位置的进程不会将彼此的命名节视为共享。

这篇关于Windows共享内存段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆