MCPcopy Create free account
hub / github.com/bytedance/bolt / free

Method free

bolt/common/memory/HashStringAllocator.cpp:443–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

441}
442
443void HashStringAllocator::free(Header* _header) {
444 Header* header = _header;
445
446 do {
447 Header* continued = nullptr;
448 if (header->isContinued()) {
449 continued = header->nextContinued();
450 header->clearContinued();
451 }
452 if (header->size() > kMaxAlloc && !pool_.isInCurrentRange(header) &&
453 allocationsFromPool_.find(header) != allocationsFromPool_.end()) {
454 freeToPool(header, header->size() + sizeof(Header));
455 // In `freeToPool()`, it accounts for sizeof(Header).
456 cumulativeBytes_ += sizeof(Header);
457 } else {
458 BOLT_CHECK(!header->isFree());
459 freeBytes_ += header->size() + sizeof(Header);
460 cumulativeBytes_ -= header->size();
461 Header* next = header->next();
462 if (next) {
463 BOLT_CHECK(!next->isPreviousFree());
464 if (next->isFree()) {
465 --numFree_;
466 removeFromFreeList(next);
467 header->setSize(header->size() + next->size() + sizeof(Header));
468 next = reinterpret_cast<Header*>(header->end());
469 BOLT_CHECK(next->isArenaEnd() || !next->isFree());
470 }
471 }
472 if (header->isPreviousFree()) {
473 auto previousFree = getPreviousFree(header);
474 removeFromFreeList(previousFree);
475 previousFree->setSize(
476 previousFree->size() + header->size() + sizeof(Header));
477
478 header = previousFree;
479 } else {
480 ++numFree_;
481 }
482 auto freedSize = header->size();
483 auto freeIndex = freeListIndex(freedSize);
484 bits::setBit(freeNonEmpty_, freeIndex);
485 free_[freeIndex].insert(
486 reinterpret_cast<CompactDoubleList*>(header->begin()));
487 markAsFree(header);
488 }
489 header = continued;
490 } while (header);
491}
492
493// static
494int64_t HashStringAllocator::offset(

Callers 2

clearMethod · 0.45
freeToPoolMethod · 0.45

Calls 15

markAsFreeFunction · 0.85
isContinuedMethod · 0.80
nextContinuedMethod · 0.80
clearContinuedMethod · 0.80
isInCurrentRangeMethod · 0.80
isFreeMethod · 0.80
isPreviousFreeMethod · 0.80
isArenaEndMethod · 0.80
setBitFunction · 0.50
sizeMethod · 0.45
findMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected