MCPcopy Create free account
hub / github.com/Gecode/gecode / heap_alloc

Method heap_alloc

gecode/kernel/memory/region.cpp:83–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81 }
82
83 void*
84 Region::heap_alloc(size_t s) {
85 void* p = heap.ralloc(s);
86 if (hi == nullptr) {
87 hi = p;
88 assert(!Support::marked(hi));
89 } else if (!Support::marked(hi)) {
90 HeapInfo* h = static_cast<HeapInfo*>
91 (heap.ralloc(sizeof(HeapInfo)+(4-1)*sizeof(void*)));
92 h->n=2; h->size=4;
93 h->blocks[0]=hi; h->blocks[1]=p;
94 hi = Support::mark(h);
95 } else {
96 HeapInfo* h = static_cast<HeapInfo*>(Support::unmark(hi));
97 if (h->n == h->size) {
98 HeapInfo* n = static_cast<HeapInfo*>
99 (heap.ralloc(sizeof(HeapInfo)+(2*h->n-1)*sizeof(void*)));
100 n->size = 2*h->n;
101 n->n = h->n;
102 memcpy(&n->blocks[0], &h->blocks[0], h->n*sizeof(void*));
103 hi = Support::mark(n);
104 heap.rfree(h);
105 h = n;
106 }
107 h->blocks[h->n++] = p;
108 }
109 return p;
110 }
111
112 void
113 Region::heap_free(void) {

Callers

nothing calls this directly

Calls 5

markedFunction · 0.85
markFunction · 0.85
unmarkFunction · 0.85
rallocMethod · 0.45
rfreeMethod · 0.45

Tested by

no test coverage detected