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);		       \

リンクがつながっていることを確認。