malloc やフレンドの代わりにtalloc APIを使用した場合のメモリ オーバーヘッドはどれくらいですか?
また、 talloc プールから割り当てるときのメモリ オーバーヘッドはどのくらいですか?
直観的には、通常のtalloc割り当てのオーバーヘッドは非常に高いと考えるでしょう。これは、ヘッダーに親/子へのポインタ、タグなどを含める必要があるためです。しかし、一方、tallocプールからの割り当てはメモリが少ないと予想されます。これは、プールが単一の操作で (またはスタックのような方法で) 割り当て解除されるためです。
プールから割り当てる場合、ドキュメントでは、これらの割り当てのメモリ オーバーヘッドは指定されていません。
talloc.c のコードを見ると、すなわちその中心線
tc = talloc_alloc_pool(ptc, TC_HDR_SIZE+size, prefix_len);
(そして、それから - 言う - __talloc()
eg によって呼び出されますtalloc_size()
)
サイズ n の割り当てのオーバーヘッドは次のようです。
align16(n) + TC_HDR_SIZE = align16(n) + 96 // on x86-64
サイズ n のプールと、そのプールからのサイズ m の r 割り当ての場合、オーバーヘッドは次のようになります。
align16(n) + TC_HDR_SIZE > r * ( align16(n) + TC_HDR_SIZE )
これは、ドキュメントの例と矛盾します。
たとえばuint64_t
、talloc プールからの割り当てでは、112 バイトのプール メモリが使用されます。
私の観察は正しいですか?talloc プールの例は間違っていますか? それとも、ここで何か不足していますか?