共享内存通信偶尔会出现连接者的参数大小没有对上的问题。不使用mmap而是普通的连接共享内存只有linux支持如果创建者小使用者大会报错而创建者大使用者小可正常使用。只能使用mmap类似的机制window:MapViewOfFile - MapViewOfFile即先创建句柄然后映射。linuxmmap区别在于你虽然只请求映射了“小尺寸”但操作系统是以“内存页”为单位进行映射的且多映射了一点点作为缓冲直到触碰到真正的物理边界。以下是详细的技术原理解析. 核心原因内存页对齐 (Page Alignment)Windows 的内存管理不是以“字节”为单位的而是以“页Page”为单位的。在 x86/x64 架构的 Windows 上标准内存页大小通常是 4KB (4096 字节)。当你调用 MapViewOfFile(hMap, ..., sizeSmallSize) 时操作系统不会精确地只映射 SmallSize 个字节。系统行为它会将 SmallSize 向上取整到最近的整数倍页大小。而linux只要连接上了就能用了。简单来说Linux (mmap)倾向于“全有或全无”。一旦你打开了共享内存对象fd映射时通常直接映射整个对象或者允许你访问整个对象的大小忽略你请求的映射长度限制在某些参数配置下。Windows (MapViewOfFile)倾向于“严格契约”。你请求映射多少字节系统就只保证这多少字节向上取整到页是合法的。超出部分直接触发硬件级保护异常会出现只有在window上的异常使用者的前4096的数据正常使用然后使用到后面突然崩溃了哈哈小小的Bug查一天。