void* LinkerMemoryAllocator::alloc(size_t size) { // treat alloc(0) as alloc(1) if (size == 0) { size = 1; } if (size > kSmallObjectMaxSize) { return alloc_mmap(size); } uint16_t log2_size = log2(size); if (log2_size < kSmallObjectMinSizeLog2) { log2_size = kSmallObjectMinSizeLog2; } return get_small_object_allocator(log2_size)->alloc(); }
// make sure nothing else is in the same line as this object static void* operator new(size_t size) { return alloc_mmap(size); }