概要

引数


object_slab_traits_tへのポインタ。

戻り値


なし。

実装



void
object_heap_t::deallocate(void* p)
{
    scoped_lock lock(m_lock);
  • ypsilon-0.9.6.update3/scoped_lock?

    assert(p);
    assert(m_pool);
    assert(((intptr_t)p & (OBJECT_SLAB_SIZE - 1)) == 0);

    int i = ((uint8_t*)p - m_pool) >> OBJECT_SLAB_SIZE_SHIFT;

iは、ヒープにおけるスラブのページ番号。

    if (i < m_pool_memo) m_pool_memo = i;
    assert(i >= 0 && i < m_pool_watermark);
    assert(m_pool[i] & PTAG_USED);

    m_pool[i] = PTAG_FREE;

    m_pool_usage = m_pool_usage - 1;
    while (++i < m_pool_watermark) {
        if (m_pool[i] & PTAG_EXTENT) {

            m_pool[i] = PTAG_FREE;
            m_pool_usage = m_pool_usage - 1;
        } else {
            break;
        }
    }
#if !defined(NDEBUG) || HPDEBUG
    memset(p, 0xBD, OBJECT_SLAB_SIZE);
#endif
}

コメントをかく


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

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

Wiki内検索

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