gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:39:40 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

如果您使用的是 Linux 或 MacOS,那么您将需要使用 mmap使用 MAP_ANONYMOUSMAP_SHARED 标志进行调用(我认为)。

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

关于c - 如何创建共享头内存exe和dll/共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com