注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

asio::streambuf加入内存池里面时需要的reset指针的操作  

2013-10-28 19:52:25|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
很多时候需要把asio::streambuf 保留起来,加到内存池里面重复使用,避免动态内存分配。
但需要一个重置流的读写指针的reset操作,以便于下次使用。
这个streambuf底层本来用的一个vector<char>作为存储空间的,其实可以简单的像它的构造函数里面那样把指针设置为 vector 的头和尾的buffer_[0] buffer_[end] 可以参考一下他basoc_stream类的构造函数代码。
       但他这个vector类型的buffer却是个私有成员变量,在子类里面也没法访问。又不想直接去改它的类的代码,其实要是他用protected就好了。
        之前做个一个办法,是继承这个类,然后参考std::stringbuf给这个类实现一个seekoff函数。这样就可以用seek操作来移动get 和put指针了。
        但这几天在网上看到一个更简单的办法
        buf.consum(buf.size();
        buf.prepare(256);
        第一语句把指针全部移到缓存的末尾,第二个语句把指针移到缓存的开始,就等于重置了指针了。
这个代码比seekoff简单多了,但其实最好还是直接改asio代码,加个reset操作好了。这个prepare consum还是有没必要的开销的。
  评论这张
 
阅读(448)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017