[英]In C++, what is the most efficient way in defining a very simple object
[英]What is the most efficient way of sharing a Julia object with C++?
我有一个用C ++编写的存储管理器,我想将一些对象从Julia传递给C ++程序。 对于我来说,接收内容作为一个字节数组就足够了,以后可以将其传递回Julia并轻松解码。
什么是最小化复制数据的最佳方法(并且还避免写入/读取磁盘)?
可以从C ++程序中分配所需的内存并与Julia共享以序列化对象,或者从Julia获取指向已分配内存的指针到C ++程序中。 在后一种情况下,我不确定如何防止Julia方面的垃圾收集。 另外,我不知道哪种序列化/反序列化方法更适合这种用例。
你能指导我找到Julia和C ++之间这种轻量级序列化/反序列化的最佳方法吗?
编辑:如果答案是依赖于操作系统的,请给出Linux或macOS的答案。
不幸的是,我无法为您提供任何源代码,因为我没有使用下面提到的C ++中的任何框架,也根本不了解Julia。
我在过去的项目中一直遵循的方法不像共享指向已经由C ++分配的内存的指针一样轻量级。 但是,既然还没有答案,我只想补充一下我如何在编程语言之间交换对象(在我的例子中是Java和C#)。
我没有读取和写入光盘,而是使用了消息队列来使两个子系统相互交换对象。
序列化,特别是涉及更复杂的对象时,可能非常耗费资源。 但是,我开始喜欢使用协议缓冲区,因为它们将预定义的对象序列化为字节流。
可以在Google Protobuffers中找到协议缓冲区的C ++库示例。 Julia的协议缓冲区分别可以在ProtoBuf.jl中找到
使用协议缓冲区的缺点是您需要有一个已定义的消息格式,这意味着您需要事先知道要交换的对象是什么样的。
可以使用消息传递队列来完成数据交换,该消息传递队列不是共享指针或者使用本地机器的网络接口写入盘。 我一直在使用的消息队列已经是ZeroMQ,因为它非常轻巧且易于使用。 但是,任何其他消息队列也应该用于此目的。
ZeroMQ的Julia接口分别是C ++的ZMQ.jl和cppzmq 。 ZeroMQ的完整指南对于帮助您入门非常有帮助,但您不需要为您的目的提供整个文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.