关于C++ 共享内存的一些研究

关于C++ 共享内存的一些研究,第1张

项目有个需求,希望程序异常重启后能尽快恢复数据,并且尽量避免数据丢失
比较主流的方式如redismysql一样写日志,重启后从日志中恢复

想到共享内存在程序崩溃时可以不被回收,如果把数据全部存到共享内存那程序重启后可以直接读取,岂不美哉

项目主要使用map存放大量的C++类对象,会占用10G+的内存空间
数据要想放到共享内存,需要map及所有的对象都要在共享内存中生成,

学习了 boost 共享内存 managed_shared_memory 发现, 需要重定义string, map等对象的allocator,将对象的堆放到共享内存上, 已string对象为例

标准库版
std::string  = basic_string, allocator>;

共享内存版
typedef boost::interprocess::allocator CharAllocator; 
typedef boost::interprocess::basic_string, CharAllocator> string; 

数据类型太多,工作量巨大,还会造成类型不兼容,溜了溜了

  • 参考文档:
    托管共享内存
    基于boost的共享内存系列-map

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563464.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存