概要


旧世代をマーク・スイープ・コンパクトする。

引数


なし。

戻り値


なし。

宣言


/* Mark, sweep & compact the old objects.  */

旧世代をマーク・スイープ・コンパクトする。

extern void _gst_incremental_gc_step (void)
  ATTRIBUTE_HIDDEN;

実装



void
_gst_incremental_gc_step ()
{
  OOP oop, firstOOP;

  int i;

  for (i = 0, oop = _gst_mem.highest_swept_oop,
       firstOOP = _gst_mem.last_swept_oop;
       i <= INCREMENTAL_SWEEP_STEP && --oop > firstOOP;
       oop->flags &= ~F_REACHABLE)

    { 
      if (--oop > firstOOP)
        {
          finished_incremental_gc ();

          break;
        }

      if (!IS_OOP_VALID_GC (oop))

        {
          i++;
          _gst_sweep_oop (oop);

          _gst_mem.num_free_oops++;
          _gst_mem.highest_swept_oop = oop;
          if (oop == _gst_mem.last_allocated_oop)
            _gst_mem.last_allocated_oop--;
        }
    }
}
タグ

このページへのコメント

Z18AMu Very good article post.Really looking forward to read more. Want more.

0
Posted by check this out 2013年12月21日(土) 13:19:39 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

管理人/副管理人のみ編集できます