C++便携对象(portable object)

便携对象(portable object),说实话,是我自创的名词。

这里便携的概念,有点类似POD,但更广泛 :内存连续的自描述的对象。通俗点: 不需要解析,直接通过拷贝内存及指针强转即可使用的对象。特性如下:

  1. 内存连续,有界
  2. 内部没有指针及其他绝对定位类型
  3. 自描述,不依赖、不引用外部对象
  4. 可通过指针指向或强转来完成构建,无需解析

便携对象用处非常多,比如对象持久化存储、网络通信、无锁并发操作等等。

因为有上面便携的特性,序列化/反序列化耗时基本为0,会在很大程度上提升系统效率。

Ok,便携对象正是我需要的,那怎么实现他呢?一般有3种途径:

  1. 直接使用POD类型,比如结构体。这种方式最直接,但也最不灵活,只能存定长数据,一旦需要变长的字符串等类型,那很不幸,你会面对一个复杂的麻烦。
  2. 利用google的flatbuffers。这种方式是先在连续内存中创建各个基础类型对象,然后按offset组织成复杂对象。相对灵活,但不爽的是需要写IDL,构造flatbuffers也是个比较痛苦的过程。并且,对于map等容器,flatbuffers也无能为力。
  3. 使用boost.interprocess中的方法。这主要利用定制boost标准容器的Allocator来实现在连续内存中创建对象,并对其用offset组织起来。优点是不需要额外的构造过程,操作统一。且支持boost的各种容器,包括map,甚至unordered_map。
posted @ 2015-10-14 14:04  三刻  阅读(289)  评论(0编辑  收藏  举报