ベクトルでのメモリ割り当てがどのように行われるかを判断するための小さなコードを書きました。
#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;
}
私はこれをUbuntuでVisualStudio2008とg++4.5.2を使用してコンパイルし、次の結果を得ました。
Visual Studio:
1 2 3 4 6 9 13 19 28 42 63 94141 211316474711 1066 1599 2398 3597 5395 8092 12138 18207 27310 40965 61447 92170 138255
capacity = capacity * 1.5;
g ++:
1 2 4 8 16 32 641282565121024 2048 4096 8192 16384 32768 65536 131072
capacity = capacity * 2;
ご覧のとおり、これらは2つの非常に異なる結果です。なんでこんな感じなの?それはコンパイラーだけに依存しているのでしょうか、それとも他の要因に依存しているのでしょうか?
多数の要素がある場合でも、容量を2倍にし続けることは本当に意味がありますか?