如何创建共享头内存exe和dll /共享对象

时间:2014-02-12 17:09:27

标签: c memory dll shared-memory

我在C中创建了一个跨平台共享库。我知道多个操作系统/硬件之间存在很多差异,每次添加新操作系统时都会增加混乱。为了克服这个问题,我决定创建一个共享对象。在创建共享对象库时,我遇到了问题,经过研究发现它是共享内存和堆内存问题。

现在我想创建一个共享对象内存或头内存。因此,不同的EXE或其他DLL /共享对象进程可以访问相同的内存。我通过搜索网络共享堆内存和其他东西,经历了很多建议。几乎所有的解决方案都是用C ++提供的。但我只想在C中使用它。请告诉我如何在C中共享对象内存,以便共享对象创建的对象可以被exe使用,销毁或共享。

目前使用CentOS 6 - GCC创建共享库并在Linux,Mac和Windows上进行测试

1 个答案:

答案 0 :(得分:0)

听起来你正在使用Windows,在这种情况下,你使用内存映射文件创建共享内存。

首先,使用CreateFileMapping创建内存映射句柄。通过将API调用的第一个参数设置为INVALID_HANDLE_VALUE,您告诉Windows不要将实际文件映射到内存中,而是创建共享内存区域。您可以为区域指定名称,以便其他进程可以打开该区域。

创建文件映射后,使用MapViewOfFile将共享区域映射到地址空间。这将返回指向共享区域的指针,然后您可以直接写入它。

如果你使用的是Linux或MacOS,那么你会想要mmap调用MAP_ANONYMOUSMAP_SHARED标志(我认为)。

由于没有适用于所有平台的标准C API,因此您需要包装API并使用一些#ifdef魔法来选择正确的实现。

相关问题