thread malloc

d:id:futsu-9:20070314
multi threadにおけるmalloc競合話。

glibcmallocは通常single thread processの場合でもmulti thread process同様に
ロックを取得するようになっているはず。
futexを使っているためロックが競合しない場合はsysenter/int80せずにユーザランド
処理が完了する。(atomic操作必要なのでアセンブラ的にはlock命令発行されるけど)
競合した場合は結局同じなので、頻繁にmalloc呼ぶ実装になっているとこういう問題
も起きるだろうなぁ。


以前mallocのthread用wrapper書いたけど、用途絞って作ればそれほどややこしい
事にはならなかったり(使い方と規模次第だけど)。mallocのシンボル自体を
置き換える場合は、ライブラリで使われている部分のケアが必要だったり色々厄介。
そういう意味では、zlib等は初期化時にメモリ確保関数を関数ポインタで渡せるので
こういう作りになっているライブラリはありがたい。


面白そうなので後で読んでみよう
http://code.google.com/p/google-perftools/