2

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 プールの例は間違っていますか? それとも、ここで何か不足していますか?

4

2 に答える 2

1

64 ビット システムでオーバーヘッドが32 ~ 49 バイトの単純化された talloc apiを実装しました。オーバーヘッドは、使用する機能によって異なります。talloc プールは、将来のリリースで実装される予定です。

UPD

プールは新しい 0.7 リリースで実装されています

于 2013-12-08T11:16:10.237 に答える