本文整理汇总了C++中FreeList::allocationWillFail方法的典型用法代码示例。如果您正苦于以下问题:C++ FreeList::allocationWillFail方法的具体用法?C++ FreeList::allocationWillFail怎么用?C++ FreeList::allocationWillFail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FreeList
的用法示例。
在下文中一共展示了FreeList::allocationWillFail方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tryAllocateIn
void* MarkedAllocator::tryAllocateIn(MarkedBlock::Handle* block)
{
ASSERT(block);
ASSERT(!block->hasAnyNewlyAllocated());
ASSERT(!block->isFreeListed());
FreeList freeList = block->sweep(MarkedBlock::Handle::SweepToFreeList);
// It's possible to stumble on a completely full block. Marking tries to retire these, but
// that algorithm is racy and may forget to do it sometimes.
if (freeList.allocationWillFail()) {
ASSERT(block->isFreeListed());
block->unsweepWithNoNewlyAllocated();
ASSERT(!block->isFreeListed());
ASSERT(!isEmpty(block));
ASSERT(!isCanAllocateButNotEmpty(block));
return nullptr;
}
m_currentBlock = block;
setFreeList(freeList);
void* result;
if (m_freeList.remaining) {
unsigned cellSize = m_cellSize;
m_freeList.remaining -= cellSize;
result = m_freeList.payloadEnd - m_freeList.remaining - cellSize;
} else {
FreeCell* head = m_freeList.head;
m_freeList.head = head->next;
result = head;
}
RELEASE_ASSERT(result);
setIsEden(m_currentBlock, true);
m_markedSpace->didAllocateInBlock(m_currentBlock);
return result;
}