是否可以flatbuffers
在 C# 中将对象序列化为本机(非托管)内存缓冲区?所以我想做这些步骤:
- 从本机内存分配本机内存缓冲区
- 在 C# 中创建对象并将它们序列化到分配的缓冲区中
- 将此内存缓冲区发送到 C++ 进行反序列化
我正在考虑 C# 中的一些自定义内存缓冲区分配器,或者以某种方式将内存缓冲区的所有权从 C# 转移到 C++。
一般来说,我想在从 C# 向 C++ 发送数据时避免复制内存,反之亦然。我希望这个内存缓冲区在 C# 和 C++ 之间共享。
我怎么做?
是否可以flatbuffers
在 C# 中将对象序列化为本机(非托管)内存缓冲区?所以我想做这些步骤:
我正在考虑 C# 中的一些自定义内存缓冲区分配器,或者以某种方式将内存缓冲区的所有权从 C# 转移到 C++。
一般来说,我想在从 C# 向 C++ 发送数据时避免复制内存,反之亦然。我希望这个内存缓冲区在 C# 和 C++ 之间共享。
我怎么做?
不,当前的 FlatBuffers 实现是硬编码的,可以写入常规字节数组。之后您可以将此数组复制到本机内存,或者像@pm100 所说的那样,固定它。
FlatBuffers 中的所有序列化都经过一个称为 的抽象ByteBuffer
,因此如果您为本机内存实现了它,则可以相对容易地直接使用它。
是的,如果您使用 C++/CLI。基本数据类型如 bool、32 位 int、short 等是相同的。对于其他类型,请查看 msclr::interop::marshal_as<>。
类似的帖子:C++/CLI Converting from System::String^ to std::string