Subject: Re: [Boost-bugs] [Boost C++ Libraries] #1252: [pool] severe overhead with unaligned sizes.
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-09-22 20:18:32
#1252: [pool] severe overhead with unaligned sizes.
--------------------------------+-------------------------------------------
Reporter: phrosty_at_[hidden] | Owner: marshall
Type: Bugs | Status: assigned
Milestone: Boost 1.37.0 | Component: pool
Version: Boost 1.34.1 | Severity: Problem
Resolution: | Keywords: pool
--------------------------------+-------------------------------------------
Changes (by cnewbold):
* cc: cnewbold (added)
Comment:
Here are my thoughts...
I believe that the design outlined in the linked documents is sound,
including the use of LCM to find the chunk size which will satisfy the
alignment requirements of the free list pointer and block size.
The problem with the original design is using requested_size in the LCM
computation. Just because I asked for chunks of X bytes does not mean that
each chunk must be aligned on an X byte boundary.
Predicate 2 of the "Guaranteeing Alignment" document quotes language from
5.3.4/10 of the C++ standard indicating that memory obtained in a 'new'
expression must be aligned on a boundary that is a multiple of that
required by the type with the most stringent alignment requirement. On
most platforms, this is going to be double, or long long, or maybe long
double.
The point being that the "worst-case" scenario is that the programmer
tries to lay down a structure at the start of a chunk obtained from the
pool and that structure has an element of such a type.
This is exactly what malloc() or operator new() does. I do not think that
the pool needs to do anything more.
The proposed change in this ticket, however, is not correct. It does not
account for the possibility that some type may have a more stringent
alignment requirement than the free-list pointer and/or block size value.
-- Ticket URL: <http://svn.boost.org/trac/boost/ticket/1252#comment:5> 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:49:58 UTC