c# - 使用 FlatBuffers 从 C# 序列化到 native 内存缓冲区

标签 c# c++ interop flatbuffers

是否可以使用 C# 中的 flatbuffers 将对象序列化到 native (非托管)内存缓冲区? 所以我想执行以下步骤:

  1. 从 native 内存分配一个 native 内存缓冲区
  2. 在 C# 中创建对象并将它们序列化到分配的缓冲区中
  3. 将此内存缓冲区发送到 C++ 进行反序列化

我正在考虑 C# 中的一些自定义内存缓冲区分配器,或者将内存缓冲区的所有权从 C# 转移到 C++ 的某种方式。

一般来说,我想避免在将数据从 C# 发送到 C++ 时复制内存,反之亦然。我希望此内存缓冲区在 C# 和 C++ 之间共享。

我该怎么做?

最佳答案

不,当前的 FlatBuffers 实现被硬编码为写入常规字节数组。之后您可以将此数组复制到 native 内存,或者像@pm100 所说的那样,固定它。

FlatBuffers 中的所有序列化都经过一个称为 ByteBuffer 的抽象,因此如果您为 native 内存实现了它,就可以相对容易地直接使用它。

关于c# - 使用 FlatBuffers 从 C# 序列化到 native 内存缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979948/

相关文章:

c# - 计算新的 ScrollPercent - 在 ViewSize 改变之后

c# - 经典 ASP 是否有与 C# 中的 #if DEBUG 语句等效的语句?

c++ - kd-tree 中的无限递归

c++ - lambda 函数 c++ 按值捕获重置其值,为什么?

c++ - 监控 OpenCL 内核的进度

linux - 在 Windows 上重新编译/运行动态共享对象 (DSO)

C# 4.0 动态对象和 WinAPI 接口(interface),如 IShellItem(无需在 C# 源代码中定义它们)

mercurial - 将 Mercurial 与 Perforce 结合使用

c# - 将 IEnumerable<T> 转换为运行时类型

c# - 我应该如何从位创建字节?