最終更新:ID:D7J/gPk67w 2009年02月18日(水) 23:32:37履歴
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 }
タグ
コメントをかく