2016-06-17 8 views
0
class A {}; 
class B {}; 
Both the classes are properly defined. 

struct MyStruct{ 
typedef std::vector< std::pair< const A*, const B* > > TVec; 
std::map< std::string, TVec > d_data; 
}; 

私は2次元配列の各要素が構造体MyStruct型である10X10の2次元配列を持っています。同じ数のオブジェクトのメモリフットプリント

ここでは、この2D配列に追加する要素が100個あります。 各要素が配列の一意の位置に挿入されている場合、その場合、私のメモリフットプリントは「X」MBと言います。 各2D配列要素に格納されているMyStruct要素は1つだけです。

しかし、最後の位置、つまり2DArr [9] [9]に100種類のMyStruct要素をすべて追加すると、私のメモリフットプリントは「Y」MBと言います。

地図サイズが1であると仮定すると、すなわち、キーが1つしかなく、そのキーに対応する場合、複数の値がベクトルに格納されます。

「Y」は「X」の4倍近くにあります。 なぜそれが最後であるのか、同じ数の要素、つまり2D配列の100個のMyStruct要素を異なる場所に挿入していますどちらの場合も

答えて

-2

通常、ベクターは各インサートで再割り当てされません。遅いです。通常、指数配分戦略があります。 vector memory allocation strategy

+0

最後の段落は正しいとは思いません。特に、 '少し遅れて、バックグラウンドスレッドの空き未使用アイテム '。これはjavaではありません。各オブジェクトは非常に特定の寿命を持っています。あなたは ''遅れて ''デストラクタ 'を呼び出すことはできません。 – bolov

+0

ベクタのどの項目が「未使用」であるかをインプリメンテーションがどのように認識しますか? –

+0

bolov:アイテムに割り当てられ、デストラクタを呼び出すメモリは2つの異なるものです。 Cody:.size()と.capacity()は異なります。 – lorro

関連する問題