矢量内存分配策略

m47*_*47h 9 c++ memory-management 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;
}
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu上使用Visual Studio 2008和g ++ 4.5.2编译了这个并获得了以下结果:

视觉工作室:

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;
Run Code Online (Sandbox Code Playgroud)

克++:

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

capacity = capacity * 2;
Run Code Online (Sandbox Code Playgroud)

如您所见,这是两个非常不同的结果.为什么会这样?它只取决于编译器还是沉迷于其他因素?

即使对于大量元素,继续将容量增加一倍是否真的有意义?

And*_*rew 8

vector增长的实施方式如何定义.因此可以使用不同的策略,在插入相同数量的元素之后产生不同的容量

如果您需要依赖分配的项目数量,您应该使用reserve和/或resize方法vector