3

私が実装したツリーデータ構造が占める正確なサイズをバイト単位で見つける必要があります。ノード構造は次のとおりです

struct Node
{
    int  word;       
    int   count;       
    unordered_map<int, Node*> map;       

}node;   

私が行っているのは、 size(int)*2(word と count の場合) + map.bucket_count() * (sizeof(int) + sizeof(Node*)) で、ノードごとにこれを繰り返します。unordered_map のストレージの要素オーバーヘッドを無視している場合、これは正しい方法ですか?

また、私が正しければ、 map.bucket_count() は、事前に割り当てられたものを含め、現在割り当てられているバケットの数を示します。事前に割り当てられたバケットを無視する代わりに map.size() を使用する必要がありますか?

それとも、これらすべての代わりに、MemTrack などのツールを使用して使用メモリを見つけるほうがよいのでしょうか?

4

1 に答える 1

3

それとも、これらすべての代わりに、MemTrack などのツールを使用して使用メモリを見つけるほうがよいのでしょうか?

はい。複雑で不透明なオブジェクトがどれだけのメモリを消費するunordered_mapかを外部から知ることはできません。優れたメモリ プロファイラを使用すると、メモリ アロケータ自体がどれだけのオーバーヘッドを消費するかがわかります。

于 2011-09-22T11:16:10.337 に答える