#shared-memory #ipc #pub-sub #zero-copy #request-response

iceoryx2-bb-container

iceoryx2:与 IPC 共享内存兼容的容器

9 个不稳定版本 (3 个破坏性版本)

0.3.0 2024 年 4 月 18 日
0.2.2 2024 年 1 月 17 日
0.1.1 2023 年 12 月 15 日
0.0.5 2023 年 12 月 14 日

#7 in #publish-subscribe

Download history 6/week @ 2024-04-26 2/week @ 2024-05-10 25/week @ 2024-05-17 23/week @ 2024-05-24 29/week @ 2024-05-31 117/week @ 2024-06-07 65/week @ 2024-06-14 39/week @ 2024-06-21 19/week @ 2024-06-28 32/week @ 2024-07-05 47/week @ 2024-07-12 42/week @ 2024-07-19 98/week @ 2024-07-26 69/week @ 2024-08-02 34/week @ 2024-08-09

每月 249 次下载
用于 8 个 crate (6 个直接使用)

MIT/Apache

155KB
2.5K SLoC

iceoryx2 构建模块 (BB) 容器

这是 iceoryx2 的一个支持库,它包含与共享内存兼容的容器,可用于构建用于进程间通信的自定义有效负载类型。

大多数容器有 3 种变体

  1. FixedSize*Container*,编译时固定大小版本。容量必须在编译时已知。这些固定大小构造总是自包含的,这意味着所需的内存是构造的一部分,通常存储在某种数组中。
  2. Relocatable*Container*,运行时固定大小版本,与共享内存兼容。容量必须在创建对象时已知。 此对象不可移动!
  3. *Container*,运行时固定大小版本,不与共享内存兼容但可移动。默认情况下,内存存储在堆上。

示例

1. 编译时固定大小容器

我们创建一个由编译时固定大小容器组成的结构,可用于零拷贝进程间通信。

use iceoryx2_bb_container::byte_string::*;
use iceoryx2_bb_container::vec::*;

const TEXT_CAPACITY: usize = 123;
const DATA_CAPACITY: usize = 456;

#[repr(C)]
struct MyMessageType {
    some_text: FixedSizeByteString<TEXT_CAPACITY>,
    some_data: FixedSizeVec<u64, DATA_CAPACITY>,
}

let my_message = MyMessageType {
    some_text: FixedSizeByteString::from_bytes(b"Hello World")?,
    some_data: FixedSizeVec::new(),
};

2. 与共享内存兼容的运行时固定大小容器

尽管容器已经实现,但 iceoryx2 本身尚未支持运行时固定大小类型。这已被计划,并将成为即将发布的版本的一部分。

3. 运行时固定大小容器

我们创建一个由运行时固定大小容器组成的结构。当需要在需要预先分配以确保所需内存始终可用的安全关键环境中使用时,这可能会很有趣。

use iceoryx2_bb_container::queue::*;

const QUEUE_CAPACITY: usize = 123;

#[repr(C)]
struct MyType {
    some_queue: Queue<u64>,
}

let my_thing = MyType {
    some_queue: Queue::new(QUEUE_CAPACITY),
};

依赖关系

~220KB