Thanks for these answers, Martin!
Patrick
Original Message
From: Martin Sebor [mailto:sebor@roguewave.com]
Sent: Wednesday, May 23, 2007 12:09 PM
To: stdcxxdev@incubator.apache.org
Subject: Re: std::vector intialization on HPUX
Patrick Happel wrote:
> Hello all,
> I'm working with versions 4.1.2 and 4.1.0 of the STDCXX on HPUX 11i
> with aCC 3.63, and I've noticed that when a std::vector is constructed
> with a size parameter, it's actually allocated as that size + 32
> additional elements. For example:
>
> #include <iostream>
> #include <vector>
>
> int main() {
> std::vector<long> testvec1(4);
> std::cout << "Capacity: " << testvec1.capacity() << std::endl;
> std::cout << "Size: " << testvec1.size() << std::endl; return 0; }
>
> When run will output:
>
> [phappel@moe 15d]$ ./stdvectest
> Capacity: 36
> Size: 4
>
> The HPUX Standard Library will allocate 32 element sizes to a
> vector declared with a size less than 32, but will allocate as
> expected beyond that. STDCXX, however, seems like it will always add
32 to the size.
> I'm curious if there is an explanation for this  is it perhaps some
> quirk of memory allocation or template instantiation on HPUX? Any
> insight would be appreciated!
Vector in stdcxx computes the capacity, C, from the desired size N, the
Golden Ratio R (1.618), and the minimum capacity Cmin (32), using the
following formula:
C := max (N * R, N + Cmin)
This is based on the assumption that more vectors will grow than not,
and that by how much they will grow is a function of their current size.
The Golden Ratio is known to strike an optimum balance between the
amount of utilized space and the amount unused space. See, for example:
http://en.wikipedia.org/wiki/Golden_ratio
The HP implementation of vector (Rogue Wave libstd 2.2.1) seems to use a
simpler formula:
C := max (32, N)
The classic implementation of vector shipped by HP (Rogue Wave libstd
1.2.1) as well as other popular implementations such as GNU libstdc++ or
IBM XLC++ simply use N:
C := N
Martin
