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



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

现在我想创建一个共享对象内存或头部内存。因此,同一内存可以由不同的 EXE 或其他 DLL/共享对象进程访问。我通过在网上搜索共享堆内存和其他东西来浏览许多建议。几乎所有的解决方案都是在C++中提供的。但我只想要 C 语言。请让我知道如何在 C 中共享对象内存,以便 exe 可以使用、销毁或共享共享对象创建的对象。

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

听起来您使用的是Windows,在这种情况下,您可以使用内存映射文件创建共享内存。

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

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

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

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

最新更新