33

空のベクターとベクターへのポインターのメモリオーバーヘッドはどれくらいですか?

オプション A:

std::vector<int> v;

オプション B:

std::vector<int> *v = NULL;

オプション B は 1 つの 32 ビット ポインターを使用すると思います (ここでは 32 ビットを想定しています) 空の 'v' はどのくらいのメモリを占有しますか?

4

6 に答える 6

34

尋ねられた質問については、実装によって異なります。MSVC 7.1 では、次のようになります。

std:: cout << sizeof(std::vector<int>) << std::endl;

私に16(バイト)を与えます。(3 つのポインター: 容量の開始、終了、終了、およびアロケーター)

ただし、ベクトルへのポインターが大きなオーバーヘッドを与えることに注意してください。

  • 空でない場合の時間と空間の両方で
  • すべての場合において複雑です。
于 2009-02-17T18:09:55.653 に答える
13

これは完全に実装依存であり、詳細を想定したり、依存したりしないでください。価値があるのは、VCを使用して20バイトです。

于 2009-02-17T18:07:23.850 に答える
5

std::vector v;スペースを取りsizeof(v)ます。実装によって異なる場合があるため、実行して、どれだけかかるかを調べてください。

于 2009-02-17T18:03:49.147 に答える
3

VS2005:

std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;

sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20

ありがとう!

于 2009-02-17T18:25:57.270 に答える
0

実装に依存します。おそらく、現在のサイズと容量のポインターと 2 つの整数です。

于 2009-02-17T18:03:27.497 に答える