void* Allocator::allocateSlowCase(size_t size) { if (!m_isBmallocEnabled) return malloc(size); if (size <= mediumMax) { size_t sizeClass = bmalloc::sizeClass(size); BumpAllocator& allocator = m_bumpAllocators[sizeClass]; allocator.refill(allocateBumpRange(sizeClass)); return allocator.allocate(); } if (size <= largeMax) return allocateLarge(size); return allocateXLarge(size); }
void* Allocator::allocateSlowCase(size_t size) { if (!m_isBmallocEnabled) return malloc(size); if (size <= maskSizeClassMax) { size_t sizeClass = bmalloc::maskSizeClass(size); BumpAllocator& allocator = m_bumpAllocators[sizeClass]; refillAllocator(allocator, sizeClass); return allocator.allocate(); } if (size <= smallMax) return allocateLogSizeClass(size); if (size <= largeMax) return allocateLarge(size); if (size <= xLargeMax) return allocateXLarge(size); BCRASH(); return nullptr; }
void* Heap::allocateXLarge(std::lock_guard<StaticMutex>& lock, size_t size) { return allocateXLarge(lock, superChunkSize, size); }