vectorがPODのバッファとして使えるかどうか?

vectorがPODのバッファとして使えるかどうか実験してみました.ただし,自分は精度の良い測定ができるフレームワークを持っていないので,大まかな結果だけ載せておきます.
(´-`).。oO(地道にstd::clock()使って統計的に値を推定したなんて恥ずかしくて言える訳ない・・・)
っていうか,どこかにそういうの落ちていませんか?
ちなみに測定したコードは以下の6つです.いくつかの理由により,フリーストアの確保と破棄の時間も含めて測定しています.
気になる方は自分で実験してみてください.

  • new + memcpy(ベースライン)
{
  char *trg = new char[sz];
  memcpy(trg, sz, data);
  delete[] trg;
}
{
  vector v;
  v.reserve(sz);
  for(std::size_t i = 0; i < sz; ++i){
    v.push_back(data[i]);
  }
}
{
  std::vector v(sz); // resizeを一緒にやってしまう
  memcpy(&v[0], sz, data);
}
{
  std::vector v(data, data + sz);
}

以下の2つはアルゴリズムの実装を見ていてあることが気になったので,比較のためにやったものです.

{
  std::vector v(sz);
  std::copy(data, data + sz, v.begin());
}
  • vector::resize + ポインタによるstd::copy
{
  std::vector v(sz);
  std::copy(data, data + sz, &v[0]);
}

以下では,ベースラインを1.0としてoverheadがどれだけあるかを数字で示します.(2.0ならベースラインの2倍のオーバーヘッドという意味)