MCPcopy Create free account
hub / github.com/beefytech/Beef / DoSampledAllocation

Function DoSampledAllocation

BeefTools/BeefMem/gperftools/src/tcmalloc.cc:965–990  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

963}
964
965static void* DoSampledAllocation(size_t size) {
966 // Grab the stack trace outside the heap lock
967 tcmalloc::StackTrace tmp;
968 tmp.depth = GetStackTrace(tmp.stack, tcmalloc::kMaxStackDepth, 1);
969 tmp.size = size;
970
971 SpinLockHolder h(Static::pageheap_lock());
972 // Allocate span
973 Span *span = Static::pageheap()->New(tcmalloc::pages(size == 0 ? 1 : size));
974 if (UNLIKELY(span == NULL)) {
975 return NULL;
976 }
977
978 // Allocate stack trace
979 tcmalloc::StackTrace *stack = Static::stacktrace_allocator()->New();
980 if (UNLIKELY(stack == NULL)) {
981 // Sampling failed because of lack of memory
982 return span;
983 }
984 *stack = tmp;
985 span->sample = 1;
986 span->objects = stack;
987 tcmalloc::DLL_Prepend(Static::sampled_objects(), span);
988
989 return SpanToMallocResult(span);
990}
991
992namespace {
993

Callers 2

do_malloc_pagesFunction · 0.70
do_malloc_smallFunction · 0.70

Calls 5

GetStackTraceFunction · 0.70
pagesFunction · 0.70
DLL_PrependFunction · 0.70
SpanToMallocResultFunction · 0.70
NewMethod · 0.45

Tested by

no test coverage detected