malloc(2)

今週はid:kosakiさんのmalloc話があるらしい.時間が微妙だけど参加できるかな.
それまでにPlan9malloc(2)をひらメソッドしておくのもいいかも,なんてね.おそらく極めてオーソドックスな実装になっていると思うけど.

カーネルもlibcもmalloc()はPoolというメモリプールからメモリを確保,解放する作りになっている.malloc()はpoolalloc()を呼び出している.g:plan9reading:keyword:poolalloc()g:plan9reading:keyword:/sys/src/9/port/debugalloc.cに定義されているものを使っているのかと思ったけど,ファイル名からわかるように,この関数はデバッグ用で,普段は使われていない.じゃあ,どうなっているのかというと,カーネルにlibcをリンクして,libc内のpoolalloc()を使っているようだ.
Pool構造体にはallocとかmergeといった関数ポインタが含まれていて,libcの場合はsbrk(2)を使うし,カーネルの場合はカーネル内のメモリ管理関数を使うようになっている.

ところで,カーネルって関数ポインタをよく使うので,WikiNameがちょっと使いにくいよね.まぁ,「詳細は〜を参照」って書くからいいのか.