estrategia de asignación de memoria de vector

Escribí un pequeño fragmento de código para determinar cómo se realiza la asignación de memoria en un vector.

#include <iostream>
#include <vector>
using namespace std;
int main ()
{
  vector<unsigned int> myvector;
  unsigned int capacity = myvector.capacity();

  for(unsigned int i = 0; i <  100000; ++i) {
    myvector.push_back(i);
    if(capacity != myvector.capacity())
    {
      capacity = myvector.capacity();
      cout << myvector.capacity() << endl;
    }
  }
  return 0;
}

Compilé esto usando Visual Studio 2008 y g ++ 4.5.2 en Ubuntu y obtuve estos resultados:

Estudio visual:

1 2 3 4 6 9 13 19 28 42 63 94 141 211 316 474 711 1066 1599 2398 3597 5395 8092 12138 18207 27310 40965 61447 92170 138255

capacity = capacity * 1.5;

g ++:

1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072

capacity = capacity * 2;

Como puedes ver, estos son dos resultados muy diferentes. ¿Por qué esto es así? ¿Depende solo del compilador o es adicto a otros factores?

¿Realmente tiene sentido seguir duplicando la capacidad, incluso para una gran cantidad de elementos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta