C++ 反射内存 (RFM) 双机通讯实战:微秒级同步
背景
在实时仿真和高频交易系统中,当延迟要求被压缩到微秒级(µs)时,TCP/IP 协议栈往往成为瓶颈。反射内存(Reflective Memory)通过硬件实现内存级别的镜像,A 机写入数据,B 机几乎同时(硬件延迟 <500ns)读取,无需 Socket 或 Bind。
架构原理
反射内存不是传统网络,而是将两台电脑的内存通过光纤卡连接。代码层面只需操作指针地址,硬件自动广播数据。
1.1 硬件拓扑
- 主机 A(发送端)
- 主机 B(接收端)
- 链路:PCIE-5565 卡 + 光纤传输 (2.125Gbps)
- 流程:CPU -> RAM -> PCIE 卡 -> 光纤 -> PCIE 卡 -> RAM -> CPU
环境准备
- IDE: Visual Studio 2019 / 2022
- 语言: C++11 及以上
- SDK: 厂家提供的
rfm2g开发包(包含rfm2g_api.h和rfm2g.lib) - 核心 API:
rfm2gOpen(): 打开板卡句柄rfm2gMapUserMemory(): 映射硬件内存至用户空间rfm2gClose(): 关闭设备
通讯协议设计
反射内存是纯二进制传输,双方结构体内存布局必须严格一致。
#pragma once
#include <cstdint>
#pragma pack(push, 1)
struct FlightData {
uint32_t header; // 包头
uint64_t packetId; // 包序号
double timestamp; // 时间戳
float roll; // 横滚角
float pitch; // 俯仰角
float yaw; // 偏航角
uint8_t status; // 系统状态
char message[32]; // 文本消息
};
RFM_OFFSET = ;


