MCPcopy Create free account
hub / github.com/dmtcp/dmtcp / _alloc_raw

Function _alloc_raw

jalib/jalloc.cpp:51–94  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49{
50
51inline void *
52_alloc_raw(size_t n)
53{
54# ifdef JALIB_USE_MALLOC
55 return malloc(n);
56
57# else // ifdef JALIB_USE_MALLOC
58
59 // #define USE_DMTCP_ALLOC_ARENA
60# ifdef USE_DMTCP_ALLOC_ARENA
61# ifndef __x86_64__
62# error "USE_DMTCP_ALLOC_ARENA can't be used with 32-bit binaries"
63# endif // ifndef __x86_64__
64 static void *mmapHintAddr = (void *)0x1f000000000;
65 if (n % sysconf(_SC_PAGESIZE) != 0) {
66 n = (n + sysconf(_SC_PAGESIZE) - (n % sysconf(_SC_PAGESIZE)));
67 }
68 void *p = mmap(mmapHintAddr, n, PROT_READ | PROT_WRITE,
69 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
70 if (p != MAP_FAILED) {
71 mmapHintAddr = p + n;
72 }
73# else // ifdef USE_DMTCP_ALLOC_ARENA
74 void *p =
75 mmap(NULL, n, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
76# endif // ifdef USE_DMTCP_ALLOC_ARENA
77
78 if (p == MAP_FAILED) {
79 perror("DMTCP(" __FILE__ "): _alloc_raw: ");
80 }
81
82# ifdef JALLOC_DEBUG_STATS
83 if (p != MAP_FAILED) {
84 int idx = __sync_fetch_and_add(&numAllocArenas, 1);
85 if (idx < MAX_ARENAS) {
86 allocArenas[idx].startAddr = p;
87 allocArenas[idx].endAddr = (char*)p + n;
88 }
89 }
90# endif // ifdef JALLOC_DEBUG_STATS
91
92 return p;
93# endif // ifdef JALIB_USE_MALLOC
94}
95
96void jalib::JAlloc::getAllocArenas(JAllocArena **arenas, int *numArenas)
97{

Callers 1

allocateMethod · 0.85

Calls 2

mallocFunction · 0.85
mmapFunction · 0.50

Tested by

no test coverage detected