[Boost-bugs] [Boost C++ Libraries] #3788: object_pool 存在比较严重的效率问题。

Subject: [Boost-bugs] [Boost C++ Libraries] #3788: object_pool 存在比较严重的效率问题。
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2009-12-22 06:45:22


#3788: object_pool 存在比较严重的效率问题。
---------------------------------------+------------------------------------
 Reporter: Dai Yun <dy95020@…> | Owner: yupeng
     Type: Bugs | Status: new
Milestone: Boost 1.42.0 | Component: pool
  Version: Boost 1.41.0 | Severity: Problem
 Keywords: object_pool |
---------------------------------------+------------------------------------
 boost::object_pool 这个功能并没有错误,只是在创建和删除对象时,存在着很严重的效率问题。如下:
     1. 创建对象时,在申请一个大内存块后,需要对每一个小单元遍历,并赋值一个地址,这个比较浪费时间。当然这个问题不是很严重。
     2. 释放对象时,即在调用 boost::object_pool::free() å’Œ
 boost::object_pool::destroy() 时,问题就比较严重了。主要在于 void *
 simple_segregated_storage<SizeType>::find_prev(void * const
 ptr)这个函数,每当用玩请求 free 一个指针时,他需要从链表头去查找该节点的前一个节点。比如说,如果用户已经 malloc 了 10000
 ä¸ªèŠ‚点,然后又从头 free 了 9000 个。那么在 free 第 9001 个时,他会从链表头遍历前 9000
 ä¸ªèŠ‚点一遍。这个时间花费的相当长。
     æˆ‘已经重新写了一份 object_pool 的实现。效率有了很大的提高。
     æµ‹è¯•å¦‚下,先 malloc 10000 个对象,再 free è¿™ 10000 个对象。测试机器配置:
     CPU: Intel(R) Core(TM)2 4300@ 1.80GHz
 ã€€ã€€MEM: 2.00 GB
     boost::obbject_pool 用时约 8 - 9 秒。
     object_pool 用时约 3 - 4 毫秒。(我重写的 object_pool)。

     å› ä¸ºä»Ž svn 下载 boost 的时间实在太长了,还总是下载一半断了,所以及我把代码在附件时奉上。包含了测试代码。

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/3788>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:02 UTC