概要


オブジェクトを初期化する。

引数

  • object_heap: このオブジェクトを管理しているオブジェクトへのポインタ。
  • object_size: このオブジェクトで管理するオブジェクトの大きさ[byte].
  • gc:

戻り値

実装



bool
object_slab_cache_t::init(object_heap_t* object_heap, int object_size, bool gc)
{
    assert(object_heap);
    assert(object_size >= (int)sizeof(object_freelist_t));

オブジェクトの大きさが、フリーリストの要素を保持できるだけの大きさがなければ、エラーとする。

    if (object_size & (object_size - 1)) {
        fatal("%s:%u object_size must be power of 2 but got %d", __FILE__, __LINE__, object_size);
        return false;
    }
    destroy();

    m_heap = object_heap;
    m_object_size = object_size;
    m_object_size_shift = 0;
    m_bitmap_size = 0;
    m_cache_count = 0;
    m_cache_limit = 0;
    int bits = m_object_size;
    while (bits >>= 1) m_object_size_shift++;
    if (gc) m_bitmap_size = ((OBJECT_SLAB_SIZE >> m_object_size_shift) + 7) / 8;

    return true;
}

コメントをかく


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

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

Wiki内検索

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