kri*_*ris 6 c windows shared-memory
我一直在谷歌上搜索这个,并没有找到明确的答案,所以我希望有人对 Windows VS linux 中的共享内存段有一些了解。
在 Linux 中有两种为 IPC 创建共享内存的方法:共享内存段(shmget 等)和内存映射文件(mmap)。根据我的简要理解,mmap 要求您在操作系统中的某处有一个实际文件进行映射,而共享内存段只是内存中可以由进程附加到的基于名称的段。
在 Windows 中,似乎只有内存映射文件等价于您必须在某处浮动的实际文件。
我的问题:这实际上是 Windows 中唯一的共享内存,还是它有用于创建非基于文件的共享内存段的 api。
Unix mmap()API 实际上等同于CreateFileMapping/ MapViewOfFileWindows API。两者都可以映射文件和/或可以创建由交换设备(如果有)支持的共享(匿名)映射。事实上,当请求的内存大小足够大时, glibc使用anonymousmmap()来实现。malloc()
Windows 支持一种附加机制 - 可执行文件中的共享数据部分,Linux 中未实现这一点。首先,您使用创建一个命名数据部分#pragma data_seg(".somename")并将共享变量放入其中。然后,您告诉链接器使用以下选项将该节标记为读/写/共享:/SECTION:.somename,RWS。整个过程在MSDN中有描述。这仅适用于同一模块的副本(EXE 或 DLL 文件)。相同模块意味着同一文件系统位置中的相同文件:从同一可执行文件的不同副本创建但位于不同位置的进程不会看到彼此共享的命名部分。
| 归档时间: |
|
| 查看次数: |
5761 次 |
| 最近记录: |