Subject: Re: [boost] [utility] new auto_buffer class --- RFC
From: Peter Dimov (pdimov_at_[hidden])
Date: 2009-03-02 13:30:58


Thorsten Ottosen:
> Peter Dimov skrev:
>> Thorsten Ottosen:
>>> Peter Dimov skrev:
>> ....
>>>> for x in w
>>>> if pred(x)
>>>> v.push_back(x)
>>>>
>>>> The typical number of elements satisfying pred may be ~7.1, so making v
>>>> have a stack capacity of 8 will eliminate a heap allocation and will be
>>>> a big win. But you can't determine the maximum capacity in advance.
>>>
>>> Is it not |w|?
>>
>> Yes, it technically is bounded by |w|. But using |w| as the capacity of v
>> defeats the purpose of the optimization, which is to avoid allocating
>> storage for |w| elements (typically on the heap).
>
> But then you can't know if using auto_buffer is an optimization.

It depends on the distribution of |v|. Let's say that in X% of the cases the
final |v| is less than a constant K. When X is close enough to 100, using
auto_buffer<T,K> is a win. Even though some outliers may cause more than one
allocation, the majority will cause zero.