在 C 和 C++ 之间共享内存的 Linux 是否可行
Is Linux shared memory between C and C++ feasible?
我写了一个纯数据插件/外部,但 API 是 C 语言所以我想用C++写大部分内容(现在是 2016 年,对吧?
所以我想我可以用C++编写主核心,并让 pluggn 只向该核心程序发送/接收信息。
首先,我虽然关于套接字,会更容易实现,但是然后我读到了 Linux 下的共享内存。
但是在 c 和 c++ 之间可以做到这一点吗?
在 Linux 进程之间共享内存发生在操作系统级别,这与编写程序的原始语言无关。两者都将使用系统调用来访问共享内存。只要你在"原始"模式下使用它,使用什么语言并不重要。
例外情况是,如果您尝试将内存用于结构化数据(即结构或类而不是"原始"字节数组)。然后,您需要解决各种特定于语言的怪癖(填充规则,vtable指针等)。
C调用约定可以直接使用,也可以在C++内提供。不要自欺欺人。你不需要任何 C 中的"代理"插件和 C++ 中的主核心——你可以用 C++ 编写该插件,公开兼容的 C API。
无论如何,您可以使用 POSIX/linux 系统功能从C++内部访问共享内存。它实际上只是普通的 C 函数调用,您可以直接在 C++ 中使用,而无需编写任何"适配器"等。
相关文章:
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- ofstream::close() 是否在 Linux 上调用同步?
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 在.NET Core中是否有与DllImport等效的Linux?
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- linux 是否"rename"函数调用块,直到复制(当源和目标在不同磁盘中时)完成
- 如何检测 CDRom 是否是 Linux 上的 DVD
- 用户空间(Linux)中是否有高分辨率时钟(我们)?
- 如何知道我正在使用的Linux OS是否具有特定的系统调用
- 如何检查过程是否在Red Hat Linux上运行
- Qt - 有没有办法检查窗口是否标记为始终在顶部(linux)?
- C/C++:是否可以将 Eclipse 项目设置配置为接受 void 指针而不对所有 Linux 发行版进行强制转换
- 我们是否可以使用 FireBase 云消息传递来发送或接收消息,或者在 Windows 桌面/控制台或 Linux 控制
- 是否可以通过图形用户界面 (GUI) 与 Linux 命令行界面 (CLI) 进行交互
- Linux/GCC:是否有一种方法可以检查构建是否与其他机器上的前一个机器相同
- clang,linux是否有一个选项可以在链接时更改共享库名称
- 在 C 和 C++ 之间共享内存的 Linux 是否可行