mplus-outline-fonts 3 (途中)
malloc.c を読んでみる。 推測たっぷりなまとめ。
このへんのコードはメモリの断片を再利用したいね!ってことみたい。そして、
いまあいてて断片になってるとこのリストがある。そこから要求されたサイズ
がぎりぎりはいるターゲットを選びだす。これが victim になる(多分)。
さて、ターゲットが決まったらそこを提供するわけだけど、その前に断片リス
トから外しておかなくてはいけない。 その処理を行なうのが unlink。
FD = P->fd; \ BK = P->bk; \ if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) \ malloc_printerr (check_action, "corrupted double-linked list", P); \
前の項目と次の項目をとりだして、リストがちゃんとつながっているかチェッ
ク。 __builtin_expect は確か分岐予測。 gcc の拡張で x86 の prefetch の
ための最適化をかけるヒントになるはず。 (JMP すると prefetch が消えると
かなんとかそんな話)
else { \ FD->bk = BK; \ BK->fd = FD; \
リストからひっこぬく。
if (!in_smallbin_range (P->size) \ && __builtin_expect (P->fd_nextsize != NULL, 0)) { \
chunk がある程度大きいものだったら
assert (P->fd_nextsize->bk_nextsize == P); \ assert (P->bk_nextsize->fd_nextsize == P); \
リンクがつながっていることを確認。