106 static void*
operator new(
size_t s);
108 static void operator delete(
void* p);
159 void alloc_fill(
SharedMemory* sm,
size_t s,
bool first);
175 static size_t sz2i(
size_t);
177 static size_t i2sz(
size_t);
191 void reuse(
void* p,
size_t s);
201 SharedMemory::operator
new(
size_t s) {
205 SharedMemory::operator
delete(
void* p) {
218 while (heap.hc != NULL) {
239 return --use_cnt == 0;
252 while ((heap.hc != NULL) && (heap.hc->size < l)) {
258 if (heap.hc == NULL) {
259 assert(heap.n_hc == 0);
276 hc->
next = heap.hc; heap.hc =
hc;
309 MemoryManager::sz2i(
size_t s) {
316 MemoryManager::i2sz(
size_t i) {
345 return &cur_hc->
area[0];
349 MemoryManager::alloc_fill(
SharedMemory* sm,
size_t sz,
bool first) {
357 size_t overhead =
sizeof(HeapChunk) -
sizeof(
double);
360 size_t allocate = ((sz > cur_hcsz) ?
361 (((
size_t) (sz / cur_hcsz)) + 1) * cur_hcsz : cur_hcsz);
365 lsz = hc->size - overhead;
368 requested = hc->size;
369 hc->next = NULL; cur_hc = hc;
371 requested += hc->size;
372 hc->next = cur_hc->
next; cur_hc->
next = hc;
374 #ifdef GECODE_MEMORY_CHECK
375 for (
char*
c = start;
c < (start+lsz);
c++)
382 : cur_hcsz(MemoryConfig::
hcsz_min), requested(0), slack(NULL) {
383 alloc_fill(sm,cur_hcsz,
true);
392 : cur_hcsz(mm.cur_hcsz), requested(0), slack(NULL) {
396 (s_sub*2 < cur_hcsz))
398 alloc_fill(sm,cur_hcsz+s_sub,
true);
414 }
while (hc != NULL);
425 #ifdef GECODE_MEMORY_CHECK
427 char*
c =
static_cast<char*
>(p);
444 f->
next(fl[i]); fl[
i]=f;
460 fl_refill<s>(sm); f = fl[
i];
471 l->
next(fl[i]); fl[
i] = f;
489 (Support::ptr_cast<FreeList*>(block+sz));
501 (Support::ptr_cast<FreeList*>(block+(i+1)*sz));
505 (Support::ptr_cast<FreeList*>(NULL));