Lines Matching refs:Block

60 class Block;
99 Block *bootStrapBlock;
100 Block *bootStrapBlockUsed;
287 Block *getEmptyBlock(size_t size);
288 void returnEmptyBlock(Block *block, bool poolTheBlock);
322 std::atomic<Block*> nextPrivatizable;
328 Block *next;
329 Block *previous; /* Use double linked list to speed up removal */
347 friend Block *MemoryPool::getEmptyBlock(size_t);
353 class Block : public LocalBlockFields, class
398 MALLOC_ASSERT((uintptr_t)object - (uintptr_t)this >= sizeof(Block), msg); in checkFreePrecond()
406 MALLOC_ASSERT(allocatedCount <= (slabSize-sizeof(Block))/objectSize in checkFreePrecond()
450 const float Block::emptyEnoughRatio = 1.0 / 4.0;
452 static_assert(sizeof(Block) <= 2*estimatedCacheLineSize,
459 Block *activeBlk;
460 std::atomic<Block*> mailbox;
464 inline Block* getActiveBlock() const { return activeBlk; } in getActiveBlock()
466 inline void setActiveBlock(Block *block);
467 inline Block* setPreviousBlockActive();
468 Block* getPrivatizedFreeListBlock();
469 void moveBlockToFront(Block *block);
471 void processEmptyBlock(Block *block, bool poolTheBlock);
472 void addPublicFreeListBlock(Block* block);
474 void outofTLSBin(Block* block);
476 void pushTLSBin(Block* block);
485 friend void Block::freePublicObject (FreeObject *objectToFree);
514 #define SET_FITTING_SIZE(N) ( (slabSize-sizeof(Block))/N ) & ~(fittingAlignment-1)
540 std::atomic<Block*> head;
550 Block* block;
552 ResOfGet(Block *b, bool lastMiss) : block(b), lastAccMiss(lastMiss) {} in ResOfGet()
558 void returnBlock(Block *block);
639 Block *block = bin[i].getActiveBlock(); in cleanupBlockBins()
893 if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) { in allocate()
938 void LifoList::push(Block *block) in push()
945 Block *LifoList::pop() in pop()
947 Block* block = nullptr; in pop()
958 Block *LifoList::grab() in grab()
960 Block *block = nullptr; in grab()
1007 Block *MemoryPool::getEmptyBlock(size_t size) in getEmptyBlock()
1013 Block *result = resOfGet.block; in getEmptyBlock()
1019 result = static_cast<Block*>(extMemPool.backend.getSlabBlock(num)); in getEmptyBlock()
1029 Block *b = result; in getEmptyBlock()
1030 for (int j=0; j<num; b=(Block*)((uintptr_t)b+slabSize), j++) in getEmptyBlock()
1036 Block *b = result; in getEmptyBlock()
1037 for (int i=0; i<num; b=(Block*)((uintptr_t)b+slabSize), i++) { in getEmptyBlock()
1060 void MemoryPool::returnEmptyBlock(Block *block, bool poolTheBlock) in returnEmptyBlock()
1180 for (Block* temp = activeBlk->next; temp; temp=temp->next) { in verifyTLSBin()
1189 for (Block* temp = activeBlk->previous; temp; temp=temp->previous) { in verifyTLSBin()
1208 void Bin::pushTLSBin(Block* block) in pushTLSBin()
1238 void Bin::outofTLSBin(Block* block) in outofTLSBin()
1266 Block* Bin::getPrivatizedFreeListBlock() in getPrivatizedFreeListBlock()
1268 Block* block; in getPrivatizedFreeListBlock()
1283 block->nextPrivatizable.store((Block*)this, std::memory_order_relaxed); in getPrivatizedFreeListBlock()
1294 void Bin::addPublicFreeListBlock(Block* block) in addPublicFreeListBlock()
1305 Block* block; in cleanPublicFreeLists()
1317 Block* tmp = block->nextPrivatizable.load(std::memory_order_relaxed); in cleanPublicFreeLists()
1318 block->nextPrivatizable.store((Block*)this, std::memory_order_relaxed); in cleanPublicFreeLists()
1330 bool Block::adjustFullness() in adjustFullness()
1337 const float threshold = (slabSize - sizeof(Block)) * (1 - emptyEnoughRatio); in adjustFullness()
1353 void Block::adjustPositionInBin(Bin* bin/*=nullptr*/) in adjustPositionInBin()
1365 void Block::restoreBumpPtr() in restoreBumpPtr()
1375 void Block::freeOwnObject(void *object) in freeOwnObject()
1379 MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT ); in freeOwnObject()
1399 void Block::freePublicObject (FreeObject *objectToFree) in freePublicObject()
1428 Block* next = nextPrivatizable.load(std::memory_order_acquire); in freePublicObject()
1450 void Block::privatizePublicFreeList( bool reset ) in privatizePublicFreeList()
1475 MALLOC_ASSERT( allocatedCount <= (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT ); in privatizePublicFreeList()
1482 MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT ); in privatizePublicFreeList()
1491 void Block::privatizeOrphaned(TLSData *tls, unsigned index) in privatizeOrphaned()
1502 nextPrivatizable.store((Block*)bin, std::memory_order_relaxed); in privatizeOrphaned()
1514 bool Block::readyToShare() in readyToShare()
1530 void Block::shareOrphaned(intptr_t binTag, unsigned index) in shareOrphaned()
1561 nextPrivatizable.store((Block*)UNUSABLE, std::memory_order_relaxed); in shareOrphaned()
1564 void Block::cleanBlockHeader() in cleanBlockHeader()
1576 void Block::initEmptyBlock(TLSData *tls, size_t size) in initEmptyBlock()
1591 nextPrivatizable.store( tls? (Block*)(tls->bin + index) : nullptr, std::memory_order_relaxed); in initEmptyBlock()
1596 Block *OrphanedBlocks::get(TLSData *tls, unsigned int size) in get()
1600 Block *block = bins[index].pop(); in get()
1608 void OrphanedBlocks::put(intptr_t binTag, Block *block) in put()
1626 Block* block = bins[i].grab(); in cleanup()
1629 Block* next = block->next; in cleanup()
1650 Block *b = head.exchange(nullptr); in getBlock()
1655 Block *newHead = b->next; in getBlock()
1664 void FreeBlockPool::returnBlock(Block *block) in returnBlock()
1667 Block *localHead = head.exchange(nullptr); in returnBlock()
1674 Block *headToFree = localHead, *helper; in returnBlock()
1677 Block *last = headToFree; in returnBlock()
1681 for (Block *currBl = headToFree; currBl; currBl = helper) { in returnBlock()
1696 Block *helper; in externalCleanup()
1699 for (Block *currBl=head.exchange(nullptr); currBl; currBl=helper) { in externalCleanup()
1711 void Block::reset() in reset()
1728 inline void Bin::setActiveBlock (Block *block) in setActiveBlock()
1736 inline Block* Bin::setPreviousBlockActive() in setPreviousBlockActive()
1739 Block* temp = activeBlk->previous; in setPreviousBlockActive()
1747 inline bool Block::isOwnedByCurrentThread() const { in isOwnedByCurrentThread()
1751 FreeObject *Block::findObjectToFree(const void *object) const in findObjectToFree()
1782 Block *activeBlk = bin[index].getActiveBlock(); in release()
1785 Block *threadlessBlock = activeBlk->previous; in release()
1788 Block *threadBlock = threadlessBlock->previous; in release()
1800 Block *threadBlock = threadlessBlock->next; in release()
1836 class StartupBlock : public Block {
1886 newBlock->next = (Block*)firstStartupBlock; in allocate()
1888 firstStartupBlock->previous = (Block*)newBlock; in allocate()
1904 Block* blockToRelease = nullptr; in free()
2028 sizeof(Block), sizeof(uintptr_t) )); in initMemoryManager()
2029 MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT ); in initMemoryManager()
2105 FreeObject *Block::allocateFromFreeList() in allocateFromFreeList()
2115 MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT ); in allocateFromFreeList()
2122 FreeObject *Block::allocateFromBumpPtr() in allocateFromBumpPtr()
2127 if ( (uintptr_t)bumpPtr < (uintptr_t)this+sizeof(Block) ) { in allocateFromBumpPtr()
2130 MALLOC_ASSERT( allocatedCount < (slabSize-sizeof(Block))/objectSize, ASSERT_TEXT ); in allocateFromBumpPtr()
2137 inline FreeObject* Block::allocate() in allocate()
2158 size_t Block::findObjectSize(void *object) const in findObjectSize()
2175 void Bin::moveBlockToFront(Block *block) in moveBlockToFront()
2183 void Bin::processEmptyBlock(Block *block, bool poolTheBlock) in processEmptyBlock()
2435 Block* block = (Block *)alignDown(ptr, slabSize); in reallocAligned()
2456 inline bool Block::isProperlyPlaced(const void *object) const in isProperlyPlaced()
2463 FreeObject *Block::findAllocatedObject(const void *address) const in findAllocatedObject()
2467 MALLOC_ASSERT( offset<=slabSize-sizeof(Block), ASSERT_TEXT ); in findAllocatedObject()
2514 Block* expectedBlock = (Block*)alignDown(ptr, slabSize); in isSmallObject()
2533 Block *block = (Block *)alignDown(object, slabSize); in freeSmallObject()
2553 Block * mallocBlock; in internalPoolMalloc()
2679 Block *block = (Block*)alignDown(ptr, slabSize); in internalMsize()
2807 Block *block = (Block*)alignDown(object, slabSize); in pool_identify()