boost,pool_allocator和fast_pool_allocator是不是线程安全的?

雨中的月儿 2015-04-23 05:43:27
请教高手解答:
1. boost中,pool_allocator和fast_pool_allocator是不是线程安全的?
2. 在某些场景中,shared_ptr构造和析构非常频繁,请问如何才能减少或控制shared_ptr频繁new/delete带来的内存碎片问题?
...全文
340 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨中的月儿 2015-04-24
  • 打赏
  • 举报
回复
引用 4 楼 q191201771 的回复:
1. 你说的那两个应该不是,singleton_pool才是。 具体请看boost pool的相关文档 例如 http://www.boost.org/doc/libs/1_58_0/libs/pool/doc/html/boost/singleton_pool.html 中搜索mutex 2. 用法正确基本可以忽略消耗。
我的意思是说,类似下面的代码 class Test { // ...... }; typedef shared_ptr<Test> TestPtr; --------------------------------------------- 每次在使用的时候,都要类似代码: TestPtr newPtr (new Test()); // 这儿有new了,默认是从系统的堆上分配(次数多了,就会有内存碎片产生了)。另外,还多了shared_ptr<Test>的构造(构造函数中,也有会new调用shared_count()),所以,总共有两次new操作 如何避免这两次new操作带来的内存碎片?只使用boost::make_shared()或boost::alloc_shared,可以实现么?
雨中的月儿 2015-04-24
  • 打赏
  • 举报
回复
引用 5 楼 q191201771 的回复:
我理解 不同线程用不同pool 如果一定要跨线程使用就用它提供的单例wrap下
不同线程使用不同pool,这个理念是对的。只不过,一般情况下,pool都是针对类对象来实现的,换句话说,我在完成类的代码之后,并不知道这个类对象是否要在多线程中使用,当然也就无法实现在不同线程使用不同pool的理念了,对吧? 请问,如何解决呢?
雨中的月儿 2015-04-24
  • 打赏
  • 举报
回复
引用 1 楼 yshuise 的回复:
构造、析构平凡也没什么了不起哦!因为只是增加一个+-1
我的意思是说,类似下面的代码 class Test { // ...... }; typedef shared_ptr<Test> TestPtr; --------------------------------------------- 每次在使用的时候,都要类似代码: TestPtr newPtr (new Test()); // 这儿有new了,默认是从系统的堆上分配(次数多了,就会有内存碎片产生了)。另外,还多了shared_ptr<Test>的构造(构造函数中,也有会new调用shared_count()),所以,总共有两次new操作 如何避免这两次new操作带来的内存碎片?只使用boost::make_shared()或boost::alloc_shared,可以实现么?
就想叫yoko 2015-04-24
  • 打赏
  • 举报
回复
make_shared和new是一样的 你问的智能指针相关属于性能的东西,只能给你说经验,你想弄明白差多少就自己去profile glibc升级,malloc的策略也在变的,以前一个项目中尝试过boost object_pool,跑过压力觉得没什么区别干脆摘掉
就想叫yoko 2015-04-23
  • 打赏
  • 举报
回复
我理解 不同线程用不同pool 如果一定要跨线程使用就用它提供的单例wrap下
就想叫yoko 2015-04-23
  • 打赏
  • 举报
回复
1. 你说的那两个应该不是,singleton_pool才是。 具体请看boost pool的相关文档 例如 http://www.boost.org/doc/libs/1_58_0/libs/pool/doc/html/boost/singleton_pool.html 中搜索mutex 2. 用法正确基本可以忽略消耗。
yshuise 2015-04-23
  • 打赏
  • 举报
回复
新版的不是增加1,而是一个类
yshuise 2015-04-23
  • 打赏
  • 举报
回复
应该不是线程安全的。
yshuise 2015-04-23
  • 打赏
  • 举报
回复
构造、析构平凡也没什么了不起哦!因为只是增加一个+-1

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧