15.8.4. Caveats
在调用 write()
函数后,Fast DDS 拥有了样本的所有权,因此不再安全地对该样本进行更改。
如果首先调用了 loan_sample()
函数并且该样本从未被写入,则必须使用 discard_loan()
函数将样本返回给 DataWriter。如果不这样做,后续对 loan_sample()
的调用可能会失败,因为 DataWriter 没有更多的可借用样本。
当前支持的最大样本大小为 uint32_t 的最大值。
15.8.5. Constraints
尽管可以对在同一台机器上运行的一个或多个 Fast DDS 应用程序进程使用零拷贝,但存在一些限制:
- 仅支持简单类型。
简单类型是指其 CDR 表示与其内存表示匹配的类型。这一要求避免了 CDR 缓冲区和用户缓冲区之间的拷贝,因为数据表示是相同的。因此,仅原始类型(字符串除外)、这些原始类型的数组,以及具有 FINAL 可扩展性和这些原始类型成员的结构被视为简单类型(Fast DDS 还提供了一种 API 来检查定义的类型是否为简单:TypeSupport::is_plain()
)。
- 数据共享传输的约束也适用。
注意:
未来版本的 Fast DDS 可能会实现对非简单类型的零拷贝传输支持。
15.8.6. Next steps
一个适用于受支持传输机制的 Hello World 示例可以在 delivery_mechanisms 文件夹中找到。它展示了一个发布者和一个订阅者通过所需传输机制进行通信。只要兼容零拷贝,无论是进程内还是数据共享传输机制都是零拷贝,如果被使用的话。
内容由零声教学AI助手提供,问题来源于学员提问