static void test (void) { mps_thr_t thread; mps_pool_t pool; mps_ap_t ap; int i; cdie(mps_arena_create(&arena, mps_arena_class_vm(), (size_t) (1024*1024*100)), "create arena"); cdie(mps_thread_reg(&thread, arena), "register thread"); die( mps_pool_create(&pool, arena, mps_class_mv2(), OBJSIZE, OBJSIZE, OBJSIZE, DEPTH, FRAGLIMIT), "create MV2 pool"); die(mps_ap_create(&ap, pool, MPS_RANK_AMBIG), "create ap"); for (i = 0; i < OBJECTS; i++) { die(mv2_alloc(&objs[i], ap, OBJSIZE), "alloc"); } report("size1", "%ld", mps_arena_committed(arena)); for (i = 0; i < OBJECTS; i+=2) { mps_free(pool, objs[i], OBJSIZE); die(mv2_alloc(&objs[i], ap, OBJSIZE), "alloc"); } report("size2", "%ld", mps_arena_committed(arena)); mps_ap_destroy(ap); mps_pool_destroy(pool); mps_thread_dereg(thread); mps_arena_destroy(arena); }
static void dt(int kind, size_t minSize, size_t avgSize, size_t maxSize, mps_count_t depth, mps_count_t fragLimit, size_t mins, size_t maxs, int number, int iter) { mps_pool_t pool; mps_ap_t ap; int i, hd; clock_t time0, time1; size_t size; int secs; asserts(number <= MAXNUMBER, "number too big"); time0 = clock(); asserts(time0 != -1, "processor time not available"); die( mps_pool_create(&pool, arena, mps_class_mv2(), minSize, avgSize, maxSize, depth, fragLimit), "create MV2 pool"); die(mps_ap_create(&ap, pool, mps_rank_ambig()), "create ap"); for(hd=0; hd<number; hd++) { size = ranrange(mins, maxs); if ((ranint(2) && (kind & 2)) || (kind==DUMMY)) { queue[hd].addr=NULL; } else { die(mv2_alloc(&queue[hd].addr, ap, size), "alloc"); setobj(queue[hd].addr, size, (unsigned char) (hd%256)); queue[hd].size = size; } }; hd=-1; for(i=0; i<iter; i++) { if (kind & 1) hd = ranint(number); else {ranint(number); hd=(hd+1)%number;} /* call raninit anyway to use same time */ if (queue[hd].addr != NULL) { asserts(chkobj(queue[hd].addr, queue[hd].size, (unsigned char) (hd%256)), "corrupt at %x (%s: %x, %x, %x, %i, %i, %x, %x, %i, %i)", queue[hd].addr, tdesc[kind], (int) minSize, (int) avgSize, (int) maxSize, (int) depth, (int) fragLimit, (int) mins, (int) maxs, number, iter); mps_free(pool, queue[hd].addr, queue[hd].size); } size = ranrange(mins, maxs); if ((ranint(2) && (kind & 2)) || (kind==DUMMY)) { queue[hd].addr=NULL; } else { die(mv2_alloc(&queue[hd].addr, ap, size),"alloc"); setobj(queue[hd].addr, size, (unsigned char) (hd%256)); queue[hd].size = size; } } mps_pool_destroy(pool); time1=clock(); secs=(int) 100*(time1-time0)/CLOCKS_PER_SEC; comment("%s test (%x, %x, %x, %i, %i, %x, %x, %i, %i) in %i centisecs", tdesc[kind], (int) minSize, (int) avgSize, (int) maxSize, (int) depth, (int) fragLimit, (int) mins, (int) maxs, number, iter, secs); }