`
RicardoX
  • 浏览: 77232 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

boost::object_pool

阅读更多
boost pool是个不错的库,可以省点内存管理功夫,内存池分配内存,还可以速度上比malloc更快一些。
 
boost::object_pool主要针对,对象的内存分配,他可以像使用new 一样来创建对象,对象的内存放在object_pool里面。
实际上object_pool使用pool类,代码上是object_pool继承pool类,object_pool比pool多些什么呢,多的就是new 比malloc多的那些内容.
 
object_pool::construct完成类的内存分配和建构,object_pool::destroy完成类的析构和内存释放。
 
在使用的过程中遇到一个问题.
 
class TestPool
{
TestPool(int a0,int a2,int a3,int a4); 
};
object_pool<TestPool> p;
p.construct(1,2,34),出错,错误信息叫我看看TestPool的定义,看了几次也没发现什么问题;
把参数改少两个,成功。
调试到一个pool_construct_simple.inc的文件

template <typename T0>
element_type * construct(const T0 & a0)
{
  element_type * const ret = malloc();
  if (ret == 0)
    return ret;
  try { new (ret) element_type(a0); }
  catch (...) { free(ret); throw; }
  return ret;
}
template <typename T0, typename T1>
element_type * construct(const T0 & a0, const T1 & a1)
{
  element_type * const ret = malloc();
  if (ret == 0)
    return ret;
  try { new (ret) element_type(a0, a1); }
  catch (...) { free(ret); throw; }
  return ret;
}
看明白了吧,他是通过定义模板函数来实现建构函数的。
他只实际了3个参数的函数,所以我们需要自已写一个,增加代码如下:
template <typename T0, typename T1, typename T2,typename T3>
element_type * construct(const T0 & a0, const T1 & a1, const T2 & a2,const T3 &a3)
{
  element_type * const ret = malloc();
  if (ret == 0)
    return ret;
  try { new (ret) element_type(a0, a1, a2,a3); }
  catch (...) { free(ret); throw; }
  return ret;
}
 
好了,一切搞定了,问题消失了。
生活怎么就这么没劲呢???

lixiaomail
2008-08-14
分享到:
评论

相关推荐

    改进 boost::object_pool 内存池效率问题。

    相信不少人听过 boost 委员会提过 boost 里的对象池设计存在缺陷。我花了一些时间研究它的实现,发现其在效率上确实存在严重问题。这里给出一套解决方案。...可以完全替换你项目里的 object_pool。

    boost::asio::serialport实现串口通信

    Boost库是C++的一个强大工具集,它提供了`boost::asio`模块,用于处理网络和底层I/O操作,包括串口通信。本篇文章将详细介绍如何使用`boost::asio::serialport`来实现串口通信。 首先,我们需要理解`boost::asio`的...

    boost::lexical_cast用法

    boost::lexical_cast用法示例,包含数值转字串,字串转数值以及相应的异常处理代码

    orthanc ThirdPartyDownloads:boost_1_69_0_bcpdigest-1.5.6.tar.gz

    标题中的"orthanc ThirdPartyDownloads:boost_1_69_0_bcpdigest-1.5.6.tar.gz"指的是Orthanc项目的第三方依赖下载,其中包含的是Boost库的一个特定版本,即1.69.0,以及一个名为bcpdigest的工具,版本为1.5.6。...

    boost_1_78_0编译及使用

    3. **示例代码**: 使用Boost库的一个简单例子,如使用`boost::thread`创建线程: ```cpp #include &lt;boost/thread/thread.hpp&gt; void hello() { std::cout , World from a thread!" &lt;&lt; std::endl; } int main...

    boost graph library

    boost::dijkstra_shortest_paths(g, s, boost::distance_map(boost::make_iterator_property_map(dist.begin(), boost::get(boost::vertex_index, g)))); return 0; } ``` ### 总结 Boost Graph Library是一个...

    xcode iOS 使用 boost::asio 的 demo

    在TCP通信中,`boost::asio::async_connect`用于异步建立连接,`boost::asio::async_read_some`和`boost::asio::async_write_some`则用于异步读写数据。UDP通信中,`boost::asio::async_send_to`和`boost::asio::...

    boost_1_59_0.tar.gz

    CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST= This CMake script will look for boost in &lt;directory&gt;. If it is not there, it will download ...

    boost线程库源码,程序员自用

    2. **线程同步**:Boost线程库提供了多种同步机制,包括互斥量(`boost::mutex`)、条件变量(`boost::condition_variable`)、信号量(`boost::semaphore`)和事件(`boost::thread_specific_ptr`)。这些同步原语...

    boost_1_53_0.tar.gz

    其次,Boost库中的智能指针(如boost::shared_ptr和boost::unique_ptr)在C++11标准中被采纳,成为std::shared_ptr和std::unique_ptr。这些智能指针管理对象生命周期,避免内存泄漏,提高了代码的安全性。在boost_1_...

    浅析Boost智能指针:scoped_ptr shared_ptr weak_ptr

    总的来说,`boost::scoped_ptr`适用于单一所有权、局部管理的情况,`boost::shared_ptr`适用于需要共享所有权的场景,而`boost::weak_ptr`则作为解决循环引用和监视对象生存状态的工具。正确选择和使用这三种智能...

    boost_1_44_0

    5. **正则表达式库**:`boost::regex`提供了强大的正则表达式支持,比C++标准库中的实现更为强大和灵活。 6. **并发与线程**:`thread`库提供了线程管理和同步原语,如互斥量、条件变量和future/promise,帮助...

    boost_1_61_0

    3、在工程中设置工程属性来使用boost库 工程属性----------C/C++----------附加包含目录:D:\boost_1_61_0(此处就是你的安装目录)添加进去 工程属性----------链接器----------附加库目录:D:\boost_1_61_0\stage\...

    C++11 下使用 Boost.Serialization 库实现智能指针的序列化

    然而,`std::unique_ptr`不支持拷贝构造函数和赋值操作符,所以我们需要使用`boost::serialization::make_nvp`创建一个命名值对,并在`archive`对象上调用`save_object`或`save_pointer`方法。 接下来是`std::...

    boost_1_59_0.tar

    boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_...

    boost_pi_control_loop_design.rar_boost mathcad_boost pi_boost闭环

    在电力电子领域,Boost转换器是一种常见的DC-DC升压变换器,用于将较低的直流电压提升至较高的直流电压。本资料"boost_pi_control_loop_design.rar"聚焦于Boost电路的PI(比例积分)控制器设计,旨在实现稳定的闭环...

    boost_1_74_0.zip

    Boost库是C++编程语言的一个开源库集合,它提供了大量的工具和库,旨在提升C++的效率、可移植性以及库的功能性。标题中的"boost_1_74_0.zip"表明这是一个Boost库的特定版本,即1.74.0版。这个版本的Boost是为Visual ...

    boost::asio::serial下6个工程演示多种串口读取写入方式方法

    boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。

Global site tag (gtag.js) - Google Analytics