博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用Boost.Flyweight的好处

Posted on 2011-09-23 11:07  张武生  阅读(1461)  评论(0)    收藏  举报

最近使用Boost.Flyweight测试了一下,真的是非常的节省内存。(在WINDOWS下面做的测试)

废话少说,直接上例子:

#include <boost/flyweight.hpp>

#include <string>

#include <vector>

using namespace std;


void  LogUnitTest::flyweightTest()
{
 char tmp[10];
 vector< boost::flyweight<string> >  boost_v;

 for(int i =0;i< 10000000;i++)
 {
  sprintf(tmp,"zws_%d",i % 1000);
  boost_v.push_back( boost::flyweight<string>( tmp )  );
 }

 Sleep( 7000 ); //有时间查看内存情况
 return ;
}

 

void  LogUnitTest::stlTest()
{
 char tmp[10];
 vector< string >  stl_v;
 for(int i =0;i< 10000000;i++)
 {
  sprintf(tmp,"zws_%d",i % 1000);
  stl_v.push_back( (tmp)  );
 }
 cout <<"========="<<endl;
 Sleep( 7000 );
 return ;
}

 

 

使用10000000是为了造成大数据量的情况,使用%1000是为了产生使用Flyweight的场景。

运行两个测试用例,第一个用了87M,第二个内存飙升到1G然后抛出bad_alloc异常。

试想一下,如果在电信级别的应用中,有100个字段,每个字段都有最多1000个取值,但是数据量又非常大的情况下,性能会有怎样的提升!