コード例 #1
0
ファイル: aging_collector.cpp プロジェクト: AlexIljin/factor
  object* fixup_data(object* obj) {
    if (aging->contains_p(obj) || tenured->contains_p(obj)) {
      return obj;
    }

    // Is there another forwarding pointer?
    while (obj->forwarding_pointer_p()) {
      object* dest = obj->forwarding_pointer();
      obj = dest;
    }

    if (aging->contains_p(obj) || tenured->contains_p(obj)) {
      return obj;
    }

    cell size = obj->size();
    object* newpointer = aging->allot(size);
    if (!newpointer)
      throw must_start_gc_again();

    memcpy(newpointer, obj, size);
    obj->forward_to(newpointer);

    return newpointer;
  }
コード例 #2
0
ファイル: collector.hpp プロジェクト: cataska/factor
	object *promote_object(object *untagged)
	{
		cell size = untagged->size();
		object *newpointer = target->allot(size);
		if(!newpointer) throw must_start_gc_again();

		memcpy(newpointer,untagged,size);
		untagged->forward_to(newpointer);

		policy.promoted_object(newpointer);

		return newpointer;
	}