1. スレッドごとのスタックサイズ
pthread_attr_getstacksize を使用して表示します。boost::thread::attributes を使用して変更します (pthread_attr_setstacksize)。
2. glibc の malloc のスレッドごとの pre-mmap
boost.thread の gdb の例
0 0x000000000040ffe0 in boost::detail::get_once_per_thread_epoch() ()
1 0x0000000000407c12 in void boost::call_once<void (*)()>(boost::once_flag&, void (*)()) [clone .constprop.120] ()
2 0x00000000004082cf in thread_proxy ()
3 0x000000000041120a in start_thread (arg=0x7ffff7ffd700) at pthread_create.c:308
4 0x00000000004c5cf9 in clone ()
5 0x0000000000000000 in ?? ()
data=malloc(sizeof(boost::uintmax_t));
get_once_per_thread_epoch ( boost_1_50_0/libs/thread/src/pthread/once.cpp )で発見します
継続する
1 0x000000000041a0d3 in new_heap ()
2 0x000000000041b045 in arena_get2.isra.5.part.6 ()
3 0x000000000041ed13 in malloc ()
4 0x0000000000401b1a in test () at pthread_malloc_8byte.cc:9
5 0x0000000000402d3a in start_thread (arg=0x7ffff7ffd700) at pthread_create.c:308
6 0x00000000004413d9 in clone ()
7 0x0000000000000000 in ?? ()
new_heap 関数 ( glibc-2.15\malloc\arena.c ) では、64 ビット OS のスレッドごとに 64M メモリを pre-mmap します。つまり、スレッドごとに64M + 8M (デフォルトのスレッド スタック) = 72Mが使用されます。
glibc-2.15\ChangeLog.17
2009-03-13 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c: Implement PER_THREAD and ATOMIC_FASTBINS features.
* malloc/arena.c: Likewise.
* malloc/hooks.c: Likewise.
http://werping.github.io/blog/malloc_per_thread.html