別の優れた階層メモリ アロケータを知っていますが、それは裏で呼び出しmalloc
ます。
tallocは、デストラクタを備えた階層型プール ベースのメモリ アロケータです。これは Samba4 で使用されるコア メモリ アロケータであり、Samba4 開発の多くの面で大きな違いをもたらしました。
talloc を使い始めるには、talloc ガイドを読むことをお勧めします。
そうは言っても、Glibc はmalloc
すでにmmap(MAP_ANON)
より大きな割り当てを使用しておりmmap_threshold
、これは 経由で設定できますmallopt(M_MMAP_THRESHOLD, bytes)
。デフォルトでは、動的に調整されます
/*
MMAP_THRESHOLD_MAX and _MIN are the bounds on the dynamically
adjusted MMAP_THRESHOLD.
*/
#ifndef DEFAULT_MMAP_THRESHOLD_MIN
#define DEFAULT_MMAP_THRESHOLD_MIN (128 * 1024)
#endif
#ifndef DEFAULT_MMAP_THRESHOLD_MAX
/* For 32-bit platforms we cannot increase the maximum mmap
threshold much because it is also the minimum value for the
maximum heap size and its alignment. Going above 512k (i.e., 1M
for new heaps) wastes too much address space. */
# if __WORDSIZE == 32
# define DEFAULT_MMAP_THRESHOLD_MAX (512 * 1024)
# else
# define DEFAULT_MMAP_THRESHOLD_MAX (4 * 1024 * 1024 * sizeof(long))
# endif
#endif
下げる場合は注意してください。デフォルトでは、#define DEFAULT_MMAP_MAX 65536
を使用してピースが割り当てられることはありませんmmap
。これは で変更できますがmallopt(M_MMAP_MAX, count)
、多くmmap
の を使用するとオーバーヘッドが生じます。
環境変数MALLOC_MMAP_THRESHOLD_
などもこれらのオプションを設定します。
明らかに、 でmalloc
割り当てるメモリmmap
は で解放されmunmap
ます。これが Glibc のソース コード以外のどこかに文書化されているかどうか、または互換性が保証されているかどうかはわかりません。