私は ( http://www.nobugs.org/developer/win32/debug_crt_heap.html )、HeapAlloc が要求されたメモリ ブロックに加えて簿記用のメモリを割り当てることを読みました。簿記情報のサイズは 40 バイトにする必要があります (ブロックの前に 8 バイト、後に 32 バイト)。
ただし、VS2010 でテストを実行すると、実際に消費されるメモリは大幅に少ないことがわかりました。たとえば、1M int をセットに挿入します。私は malloc のフック関数を書き、すべての挿入が別の動的メモリ割り当て要求をトリガーして新しいノードを構築するようにしました。フックによると、1 つのノードには 20 バイトが必要です。80 バイトのオーバーヘッドを追加すると、1 つのノードの合計メモリは 100 バイトになります。つまり、このセットは最大 100 MB を消費する必要がありますが、TaskManager によると、わずか 32 MB しか消費しません。
したがって、次の質問があります。
オーバーヘッドは本当に 40 バイトですか? オーバーヘッドはすべての HeapAlloc'ed ブロックに適用されますか?