文章目录

项目里 Shared Memory 存放的数据结构,现在需要将其同时用于 Server 与 Client 之间的相应数据交互。Server 与 Client 之前的协议格式为 Protobuf。

为了只维护一份代码,准备将之前用于 Shared Memory 的结构转化为 Protobuf,然后两处都用这个 Protobuf。

搞了一会儿,才想起 Shared Memory 里只适合存定长的非指针结构。

汗,这个几年前就经历过,那个时候是学生时代做五子棋世界的时候,貌似是想往 Shared Memory 里存放 std::map

当时水平太低,报错了就放弃了 STL 的容器,写些了中规中矩的结构体。

这次就顺便搜下当年那个问题的解决方法。找到个说的挺好的:

1
http://www.cnblogs.com/fullsail/archive/2013/01/20/2868898.html

大意就是,STL 里容器会动态分配内存,而且 new 的东西在自己的进程空间里,别的进程访问时必然是个不对的指针。需要将 STL 的分配器定制为从共享内存里分配空间,或者其他几个链接里提到的方法。

回到我现在遇到的 Protobuf 这个问题,Protobuf 里有些如 repeated 或者 string 等会动态 new,这个如果做内存分配的定制,还得重改 Protobuf 的代码,复杂度比较高。

加上项目里的这单个协议格式制定的需求只是临时的,就更没必要了。最终放弃 Protobuf 结构直接映射到共享内存的企图。

文章目录