背景:有时候我们有这样的需求,想往共享内存里面存入我们定义的数据类型,数据类型可能是类的对象,结构体,或者普通的string,int等基本类型。通过共享内存我们可以进行多进程之间的通信(所谓的通信简单理解为两个进程之间交流共享内存中的数据),也有的时候可能不是为了数据交流,是想利用共享内存的持久机制,即共享内存之中的数据不随着程序的重启或者core了而消失。基于这个需求,我设计了一套通用的代码,用于动态插入各种类型的数据。供大家参考。
原理:
共享内存有两种API。一种是 POSIX共享内存API( shm_open() 、 shm_unlink() ),另外一种是System V共享内存 API(shmget(),shmat(),shmdt(),shmctl())。前面一种相较后面一种更易于操作,也是linux为了简便用户操作而提供给程序员的一套API。
boost库基于posix API,封装了对于共享内存的创建与设置共享内存大小的接口。并且通过红黑树算法实现对自定义数据类型的快速插入与查找,所以程序员的我们不必担心它的插入与查找效率。
基于响彻C++界的boost库的managed shared memory。这是一个媲美标准库的代码,可以直接操作。话不多说,直接上代码
#include
#include //boost::map
#include
#include // basic_string
#include
#include
#include //std::equal_to
#include
#include
上面我把这个定义成了一个模板,这样有利于存储各种类型数据