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。

转载于:https://www.cnblogs.com/luckcc/p/4877288.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值