Использование разделяемой памяти (shared memory) в ROS 2 Humble через CycloneDDS и iceoryx позволяет ускорить обмен данными между процессами на одном устройстве. Механизм отображает физические страницы памяти в адресное пространство процессов, исключая использование сетевого стека и UDP-пакетов, что снижает задержки.

Система базируется на Eclipse iceoryx, где данные размещаются в блоках (chunks) из общего пула памяти. Издатель записывает сообщение в блок, а подписчик получает ссылку на него. Это позволяет избежать фрагментации и системных вызовов, однако требует учета различий между копированием данных и передачей через механизм «займов» (loans).

Нулевое копирование (zero-copy) возможно только для POD-типов при использовании функции borrow_loaned_message. Для сложных типов, содержащих строки или заголовки, система выполняет сериализацию внутри блока памяти. Это быстрее передачи по сети, но требует затрат ресурсов процессора на сериализацию и десериализацию.

Для работы SHM необходимо предварительно запустить демон RouDi и настроить пулы памяти через TOML-конфигурацию. Разработчикам следует учитывать размер блоков с запасом, так как CycloneDDS добавляет собственные заголовки к сообщениям. Также требуется установка переменной окружения ROS_DISABLE_LOANED_MESSAGES в значение 0.

Внутри одного процесса наиболее эффективным остается IPC, работающий через указатели. Разделяемую память рекомендуется применять для связи между независимыми процессами на одной машине. Эти подходы можно комбинировать в рамках одной архитектуры для достижения максимальной производительности системы.