空のベクターとベクターへのポインターのメモリオーバーヘッドはどれくらいですか?
オプション A:
std::vector<int> v;
オプション B:
std::vector<int> *v = NULL;
オプション B は 1 つの 32 ビット ポインターを使用すると思います (ここでは 32 ビットを想定しています) 空の 'v' はどのくらいのメモリを占有しますか?
尋ねられた質問については、実装によって異なります。MSVC 7.1 では、次のようになります。
std:: cout << sizeof(std::vector<int>) << std::endl;
私に16(バイト)を与えます。(3 つのポインター: 容量の開始、終了、終了、およびアロケーター)
ただし、ベクトルへのポインターが大きなオーバーヘッドを与えることに注意してください。
これは完全に実装依存であり、詳細を想定したり、依存したりしないでください。価値があるのは、VCを使用して20バイトです。
std::vector v;
スペースを取りsizeof(v)
ます。実装によって異なる場合があるため、実行して、どれだけかかるかを調べてください。
VS2005:
std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;
sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20
ありがとう!
実装に依存します。おそらく、現在のサイズと容量のポインターと 2 つの整数です。