本文整理汇总了C++中setref函数的典型用法代码示例。如果您正苦于以下问题:C++ setref函数的具体用法?C++ setref怎么用?C++ setref使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了setref函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t poolamc1;
mps_thr_t thread;
mps_root_t root;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t ap1;
mycell *a, *b;
int i;
int j;
RC;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
die(mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&poolamc1, arena, mps_class_amc(), format, chain),
"create pool(1)");
cdie(
mps_ap_create(&ap1, poolamc1, mps_rank_exact()),
"create ap");
for (j = 1; j < 100; j++) {
comment("%i of 100.", j);
for (i = 1; i < 10000; i++) {
UC;
a = allocone(ap1, 2, 1);
b = allocone(ap1, 2, 1);
setref(a, 0, b);
setref(b, 0, a);
UC;
}
DC;
DMC;
}
mps_ap_destroy(ap1);
mps_pool_destroy(poolamc1);
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例2: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t pool;
mps_thr_t thread;
mps_root_t root;
mps_fmt_t format;
mps_chain_t chain;
int h;
mycell *p, *q, *r;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
die(mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
cdie(mmqa_pool_create_chain(&pool, arena, mps_class_amc(), format, chain),
"create pool");
cdie(mps_ap_create(&ap, pool, mps_rank_exact()), "create ap");
r = allocone(ap, 1000);
for (h = 0; h < 10000; h++) {
if (h % 10 == 0) {
report("iter", "%i", h);
}
q = allocone(ap, 1000);
p = allocone(ap, 1000);
setref(p, 1, q);
r = allocone(ap, 1000);
setref(q, 50, r);
setref(r, 1, p);
}
mps_ap_destroy(ap);
mps_pool_destroy(pool);
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例3: setref
bool FUNCREF::execute(void)
{
VMREGTYPE pref= 0;
bool result= (getMachine().pop(pref)
&& setref((VPREFERENCE)pref));
return result;
}
示例4: getMachine
bool FUNCREFPCTARGET::execute(void)
{
bool result= false;
static VPVIEWMASTER viewmaster= 0;
VPREFERENCE target= 0;
result= ((viewmaster || getMachine().ReadMem((VPVOID)reltolinear(MASTER2_IMAGE),&viewmaster,sizeof(viewmaster)))
&& getMachine().ReadMem((VPVOID)&viewmaster->target,&target,sizeof(target))
&& setref(target));
return result;
}
示例5: OSException
FileBase* FileTable::create_as(const id_type& id, int type)
{
if (is_readonly())
throw OSException(EROFS);
if (m_opened.find(id) != m_opened.end() || m_closed.find(id) != m_closed.end())
throw OSException(EEXIST);
std::shared_ptr<FileStream> data_fd, meta_fd;
std::tie(data_fd, meta_fd) = m_fio->create(id);
auto fb = btree_make_file_from_type(
type, data_fd, meta_fd, m_master_key, id, is_auth_enabled(), m_block_size, m_iv_size);
m_opened.emplace(id, fb);
fb->setref(1);
return fb.get();
}
示例6: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t poolamc;
mps_thr_t thread;
mps_root_t root, root2, root3, root4, root5, root6, root7, root1;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t apamc;
typedef mycell * myroot;
myroot a, b, c, d, e, f, g;
int i;
int j;
RC;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
cdie(
mps_root_create_table(&root1, arena, mps_rank_exact(), 0, (mps_addr_t*)&a, 1),
"root");
cdie(
mps_root_create_table(&root2, arena, mps_rank_exact(), 0, (mps_addr_t*)&b, 1),
"root");
cdie(
mps_root_create_table(&root3, arena, mps_rank_exact(), 0, (mps_addr_t*)&c, 1),
"root");
cdie(
mps_root_create_table(&root4, arena, mps_rank_exact(), 0, (mps_addr_t*)&d, 1),
"root");
cdie(
mps_root_create_table(&root5, arena, mps_rank_exact(), 0, (mps_addr_t*)&e, 1),
"root");
cdie(
mps_root_create_table(&root6, arena, mps_rank_exact(), 0, (mps_addr_t*)&f, 1),
"root");
cdie(
mps_root_create_table(&root7, arena, mps_rank_exact(), 0, (mps_addr_t*)&g, 1),
"root");
cdie(
mps_root_create_table(&root, arena, mps_rank_exact(), 0, &exfmt_root, 1),
"create exfmt root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&poolamc, arena, mps_class_amc(), format, chain),
"create pool");
cdie(
mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap");
comment("parking...");
mps_arena_park(arena);
b = allocone(apamc, 1, 1);
for (j=1; j<10; j++) {
comment("%i of 10.", j);
a = allocone(apamc, 5, 1);
cutoff_id = getid(a);
b = a;
c = a;
d = a;
e = a;
f = a;
g = a;
for (i=1; i<1000; i++) {
c = allocone(apamc, 1000, 1);
if (ranint(8) == 0) d = c;
if (ranint(8) == 0) e = c;
if (ranint(8) == 0) f = c;
if (ranint(8) == 0) g = c;
setref(c, 0, b);
setref(c, 1, d);
setref(c, 2, e);
setref(c, 3, f);
setref(c, 4, g);
b = c;
}
for (i=1; i<1000; i++) {
c = allocone(apamc, 1000, 1);
if (ranint(8) == 0) d = c;
if (ranint(8) == 0) e = c;
if (ranint(8) == 0) f = c;
if (ranint(8) == 0) g = c;
setref(c, 0, b);
setref(c, 1, d);
setref(c, 2, e);
setref(c, 3, f);
setref(c, 4, g);
//.........这里部分代码省略.........
示例7: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t poolamc, poolawl;
mps_thr_t thread;
mps_root_t root;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t apamc, apawl;
mycell *a, *b, *c;
int i;
alloccomments = 1;
fixcomments = 1;
deathcomments = 1;
formatcomments = 1;
fixcomments = 1;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
die(mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&poolamc, arena, mps_class_amc(), format, chain),
"create pool");
cdie(
mps_pool_create(&poolawl, arena, mps_class_awl(), format, getassociated),
"create pool");
cdie(
mps_ap_create(&apawl, poolawl, mps_rank_exact()),
"create ap");
cdie(
mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap");
a = allocone(apawl, 1, 1);
b = allocone(apawl, 1, 1);
c = allocone(apawl, 1000, 1);
setref(b, 0, c);
setref(c, 0, b);
for(i=0; i<1000; i++) {
b = allocdumb(apamc, 0x400*1024, 0);
if (i % 50 == 0)
comment("%d of 1000.", i);
}
mps_ap_destroy(apawl);
mps_ap_destroy(apamc);
comment("Destroyed aps.");
mps_pool_destroy(poolamc);
mps_pool_destroy(poolawl);
comment("Destroyed pools.");
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例8: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t poolamc, poolawl;
mps_thr_t thread;
mps_root_t root;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t apamc, apawl, apweak;
mycell *a, *b;
RC;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
die(mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
die(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&poolamc, arena, mps_class_amc(), format, chain),
"create pool(amc)");
cdie(mps_pool_create(&poolawl, arena, mps_class_awl(), format, getassociated),
"create pool(awl)");
cdie(mps_ap_create(&apweak, poolawl, mps_rank_weak()),
"create ap(weak)");
cdie(mps_ap_create(&apawl, poolawl, mps_rank_exact()),
"create ap(awl)");
cdie(mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap(amc)");
b = allocone(apamc, 1, mps_rank_exact());
a = allocone(apweak, 1, mps_rank_weak());
mps_ap_destroy(apawl);
mps_ap_destroy(apamc);
mps_ap_destroy(apweak);
comment("Destroyed aps.");
/* buffered segments aren't condemned! */
setref(a, 0, b);
mps_arena_collect(arena);
asserts(getref(a, 0) == b, "Reference changed or was splatted.");
mps_pool_destroy(poolamc);
mps_pool_destroy(poolawl);
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例9: test
static void test(void) {
long int i;
long int rsize;
int inramp;
mycell *r1, *r2, *s1, *s2;
cdie(mps_arena_create(&arena1, mps_arena_class_vm(),
(size_t) 1024*1024*ARENALIMIT), "create arena");
cdie(mps_arena_create(&arena2, mps_arena_class_vm(),
(size_t) 1024*1024*ARENALIMIT), "create arena");
cdie(mps_thread_reg(&thread1, arena1), "register thread");
cdie(mps_thread_reg(&thread2, arena2), "register thread");
cdie(
mps_root_create_reg(&root1, arena1, mps_rank_ambig(), 0, thread1,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
cdie(
mps_root_create_reg(&root2, arena2, mps_rank_ambig(), 0, thread2,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
cdie(
mps_root_create_table(&root1a, arena1, mps_rank_exact(), 0, &objtab1[0], TABSIZE),
"create root table");
cdie(
mps_root_create_table(&root2a, arena2, mps_rank_exact(), 0, &objtab2[0], TABSIZE),
"create root table");
cdie(
mps_fmt_create_A(&format1, arena1, &fmtA),
"create format");
cdie(
mps_fmt_create_A(&format2, arena2, &fmtA),
"create format");
cdie(
mps_pool_create(&poolamc1, arena1, mps_class_amc(), format1),
"create pool");
cdie(
mps_pool_create(&poolamc2, arena2, mps_class_amc(), format2),
"create pool");
cdie(
mps_ap_create(&apamc1, poolamc1, mps_rank_exact()),
"create ap");
cdie(
mps_ap_create(&apamc2, poolamc2, mps_rank_exact()),
"create ap");
inramp = 0;
for (i = 0; i < ITERATIONS; i++) {
if (i % 10000 == 0) {
comment("%ld of %ld", i, ITERATIONS);
}
alloc_back();
if (inramp) {
s1 = allocone(apamc1, 3, mps_rank_exact());
s2 = allocone(apamc2, 3, mps_rank_exact());
setref(r1, 0, s1);
setref(r2, 0, s2);
setref(s1, 1, r1);
setref(s2, 1, r2);
r1 = s1;
r2 = s2;
s1 = allocdumb(apamc1, RAMPSIZE, mps_rank_exact());
s2 = allocdumb(apamc2, RAMPSIZE, mps_rank_exact());
setref(r1, 2, s1);
setref(r2, 2, s2);
rsize ++;
if (ranint(LEAVERAMP) == 0) {
r1 = allocone(apamc1, 2, mps_rank_exact());
r2 = allocone(apamc2, 2, mps_rank_exact());
s1 = allocone(apamc1, 2, mps_rank_exact());
s2 = allocone(apamc2, 2, mps_rank_exact());
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_end(apamc1, mps_alloc_pattern_ramp());
mps_ap_alloc_pattern_end(apamc2, mps_alloc_pattern_ramp());
#endif
#ifdef COLLECT_WORLD
mps_arena_collect(arena1);
mps_arena_collect(arena2);
mps_arena_release(arena1);
mps_arena_release(arena2);
#endif
comment("ramp end, %ld objects", rsize);
inramp = 0;
}
} else {
if (ranint(ENTERRAMP) == 0) {
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_begin(apamc1, mps_alloc_pattern_ramp());
mps_ap_alloc_pattern_begin(apamc2, mps_alloc_pattern_ramp());
#endif
comment("ramp begin");
r1 = allocone(apamc1, 3, mps_rank_exact());
//.........这里部分代码省略.........
示例10: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t pool;
mps_thr_t thread;
mps_root_t root, root1;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t ap;
mycell *a[3];
int i,j,k;
clock_t time0, time1;
formatcomments = 1;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), (size_t)1024*1024*30),
"create arena");
cdie(mps_thread_reg(&thread, arena), "register thread");
cdie(mps_root_create_table(&root, arena, mps_rank_ambig(), 0,
(mps_addr_t*)&a[0], 3),
"create table root");
cdie(mps_root_create_table(&root1, arena, mps_rank_ambig(), 0,
(mps_addr_t *)&exfmt_root, 1),
"exfmt root");
cdie(mps_fmt_create_A(&format, arena, &fmtA),
"create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&pool, arena, mps_class_amc(), format, chain),
"create pool");
cdie(mps_ap_create(&ap, pool, mps_rank_exact()),
"create ap");
time0 = clock();
asserts(time0 != -1, "processor time not available");
for (k=0; k<100; k++) {
for (j=0; j<100; j++) {
a[0] = allocone(ap, 50, mps_rank_exact());
a[1] = a[0];
for (i=1; i<100; i++) {
a[2] = allocone(ap, 50, mps_rank_exact());
setref(a[1], 0, a[2]);
a[1] = a[2];
}
}
time1 = clock();
comment("%d: %i", k, (int) (100*(time1-time0)/CLOCKS_PER_SEC));
time0 = time1;
}
mps_ap_destroy(ap);
mps_pool_destroy(pool);
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_root_destroy(root1);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例11: test
static void test(void *stack_pointer)
{
long int i;
long int rsize = 0;
int inramp;
mycell *r = NULL, *s;
cdie(mps_arena_create(&arena, mps_arena_class_vm(),
(size_t) 1024*1024*ARENALIMIT),
"create arena");
cdie(mps_thread_reg(&thread, arena), "register thread");
cdie(mps_root_create_thread(&root, arena, thread, stack_pointer), "thread root");
cdie(
mps_root_create_table(&root1, arena, mps_rank_exact(), 0, &objtab[0], TABSIZE),
"create root table");
cdie(
mps_fmt_create_A(&format, arena, &fmtA),
"create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
cdie(
mps_pool_create(&poolamc, arena, mps_class_amc(), format, chain),
"create pool");
cdie(
mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap");
inramp = 0;
for (i = 0; i < ITERATIONS; i++) {
if (i * 10 % ITERATIONS == 0) {
comment("%ld of %ld", i, ITERATIONS);
}
alloc_back();
if (inramp) {
s = allocone(apamc, 3, mps_rank_exact());
setref(r, 0, s);
setref(s, 1, r);
r = s;
s = allocdumb(apamc, RAMPSIZE, mps_rank_exact());
setref(r, 2, s);
rsize ++;
if (ranint(LEAVERAMP) == 0) {
r = allocone(apamc, 2, mps_rank_exact());
s = allocone(apamc, 2, mps_rank_exact());
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_end(apamc, mps_alloc_pattern_ramp());
#endif
#ifdef COLLECT_WORLD
mps_arena_collect(arena);
mps_arena_release(arena);
#endif
comment("ramp end, %ld objects", rsize);
inramp = 0;
}
} else {
if (ranint(ENTERRAMP) == 0) {
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_begin(apamc, mps_alloc_pattern_ramp());
#endif
comment("ramp begin");
r = allocone(apamc, 3, mps_rank_exact());
inramp = 1;
rsize = 0;
}
}
}
mps_arena_park(arena);
mps_ap_destroy(apamc);
comment("Destroyed ap.");
mps_pool_destroy(poolamc);
comment("Destroyed pool.");
mps_fmt_destroy(format);
comment("Destroyed format.");
mps_chain_destroy(chain);
comment("Destroyed chain.");
mps_root_destroy(root1);
mps_root_destroy(root);
comment("Destroyed roots.");
mps_thread_dereg(thread);
comment("Deregistered thread.");
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例12: test
//.........这里部分代码省略.........
mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
cdie(
mps_fmt_create_A(&format, arena, &fmtA),
"create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
cdie(
mps_pool_create(&pool, arena, mps_class_amc(), format, chain),
"create pool");
for (i=0; i<NAPS; i++)
{
die(mps_ap_create(&ap[i], pool, mps_rank_exact()), "create ap");
ap_state[i] = 0;
}
cells = allocone(ap[0], NCELLS);
/* ap_state can have the following values:
0 before reserve
1 after reverse
2 after init
3 after I=A
0 after commit
*/
for(h=0; h<100; h++)
{
comment("%i of 100", h);
comment("%i collections", (int) mps_collections(arena));
for(j=0; j<1000; j++)
{
i = ranint(NAPS);
switch (ap_state[i])
{
case 0:
nrefs[i] = NUMREFS;
bytes = offsetof(struct data, ref)+nrefs[i]*sizeof(struct refitem);
alignment = MPS_PF_ALIGN;
bytes = (bytes+alignment-1)&~(alignment-1);
s[i] = bytes;
die(mps_reserve(&q, ap[i], s[i]), "reserve: ");
p[i] = q;
p[i]->data.tag = 0xD033E2A6;
p[i]->data.id = nextid;
ap_state[i] = 1;
commentif(BLAH, "%i: reserve %li at %p", i, nextid, q);
nextid +=1;
break;
case 1:
commentif(BLAH, "%i: init %li", i, p[i]->data.id);
p[i]->data.tag = MCdata;
p[i]->data.numrefs = nrefs[i];
p[i]->data.size = s[i];
ap_state[i] = 2;
for (k=0; k<nrefs[i]; k++)
{
if PNULL
{ p[i]->data.ref[k].addr = NULL;
p[i]->data.ref[k].id = 0;
}
else
{
l = ranint(NCELLS);
pobj = getref(cells, l);
p[i]->data.ref[k].addr = pobj;
p[i]->data.ref[k].id = (pobj==NULL ? 0 : pobj->data.id);
}
commentif(BLAH, " ref %i -> %li", k, p[i]->data.ref[k].id);
}
break;
case 2:
commentif(BLAH, "%i: begin commit %li", i, p[i]->data.id);
ap[i]->init = ap[i]->alloc;
ap_state[i] = 3;
break;
case 3: case 4: case 5: case 6: case 7: case 8: case 9:
ap_state[i]+=1;
break;
case 10:
commentif(BLAH, "%i: end commit %li", i, p[i]->data.id);
q=p[i];
if (ap[i]->limit != 0 || mps_ap_trip(ap[i], p[i], s[i]))
{
l = ranint(NCELLS);
setref(cells, l, q);
commentif(BLAH, "%i -> %i", i, l);
}
ap_state[i] = 0;
break;
}
}
checkfrom(cells);
}
示例13: test
static void test(void) {
long int i;
long int rsize;
mps_message_t message;
int inramp;
mycell *r, *s;
cdie(mps_arena_create(&arena, mps_arena_class_vm(),
(size_t) 1024*1024*ARENALIMIT),
"create arena");
cdie(mps_thread_reg(&thread, arena), "register thread");
cdie(
mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
cdie(
mps_root_create_table(&root1, arena, mps_rank_exact(), 0, &objtab[0], TABSIZE),
"create root table");
cdie(
mps_fmt_create_A(&format, arena, &fmtA),
"create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
cdie(
mps_pool_create(&poolamc, arena, mps_class_amc(), format, chain),
"create pool");
cdie(
mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap");
mps_message_type_enable(arena, mps_message_type_collection_stats());
inramp = 0;
for (i = 0; i < ITERATIONS; i++) {
if (i % 10000 == 0) {
comment("%ld of %ld", i, ITERATIONS);
}
alloc_back();
if (inramp) {
s = allocone(apamc, 3, mps_rank_exact());
setref(r, 0, s);
setref(s, 1, r);
r = s;
s = allocdumb(apamc, RAMPSIZE, mps_rank_exact());
setref(r, 2, s);
rsize ++;
if (ranint(LEAVERAMP) == 0) {
r = allocone(apamc, 2, mps_rank_exact());
s = allocone(apamc, 2, mps_rank_exact());
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_end(apamc, mps_alloc_pattern_ramp_collect_all());
#endif
#ifdef COLLECT_WORLD
mps_arena_collect(arena);
mps_arena_release(arena);
#endif
comment("ramp end, %ld objects", rsize);
inramp = 0;
}
} else {
if (ranint(ENTERRAMP) == 0) {
#ifdef RAMP_INTERFACE
mps_ap_alloc_pattern_begin(apamc, mps_alloc_pattern_ramp_collect_all());
#endif
comment("ramp begin");
r = allocone(apamc, 3, mps_rank_exact());
inramp = 1;
rsize = 0;
}
}
if(mps_message_get(&message, arena, mps_message_type_collection_stats())) {
unsigned long live, condemned, notCondemned;
live = mps_message_collection_stats_live_size(arena, message);
condemned = mps_message_collection_stats_condemned_size(arena, message);
notCondemned =
mps_message_collection_stats_not_condemned_size(arena, message);
comment("Collection: live=%ld, condemned=%ld, not condemned = %ld",
live, condemned, notCondemned);
mps_message_discard(arena, message);
}
}
mps_ap_destroy(apamc);
comment("Destroyed ap.");
mps_pool_destroy(poolamc);
comment("Destroyed pool.");
mps_fmt_destroy(format);
comment("Destroyed format.");
//.........这里部分代码省略.........
示例14: test
static void test(void)
{
int i;
mps_ap_t ap, sap;
mps_arena_t arena;
mps_fmt_t format;
mps_chain_t chain;
mps_pool_t pool, spool;
mps_thr_t thread;
mps_frame_t frame1;
mycell *p, *q;
size_t com, com1, com2;
formatcomments=1;
alloccomments=1;
fixcomments=1;
/* create an arena (no particular size limit) */
cdie(mps_arena_create(&arena, mps_arena_class_vm(), (size_t)ARENA_SIZE),
"create arena");
cdie(mps_thread_reg(&thread, arena), "register thread");
/* because we know objects in the stack pool don't move, */
/* we can do without roots. Hooray! */
cdie(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&pool, arena, mps_class_amc(), format, chain),
"create pool(amc)");
cdie(mps_ap_create(&ap, pool, mps_rank_exact()), "create ap(amc)");
cdie(mps_pool_create(&spool, arena, mps_class_snc(), format),
"create SNC pool");
cdie(mps_ap_create(&sap, spool, mps_rank_exact()), "create ap");
/* push, alloc, check object is scanned */
com = arena_committed_and_used(arena);
report("com", "%ld", com);
cdie(mps_ap_frame_push(&frame1, sap), "push");
p = allocone(sap, 2, mps_rank_exact());
q = allocdumb(ap, BIGSIZE, mps_rank_exact());
setref(p, 0, q);
q = allocdumb(ap, SMALLSIZE, mps_rank_exact());
report("com", "%ld", arena_committed_and_used(arena));
comment("collect...");
mps_arena_collect(arena);
com1 = arena_committed_and_used(arena);
mps_arena_release(arena);
report("com", "%ld", com1);
report("inc1", "%d", (com1-com)/BIGSIZE);
/* pop, check object isn't scanned */
cdie(mps_ap_frame_pop(sap, frame1), "pop");
comment("collect...");
mps_arena_collect(arena);
com1 = arena_committed_and_used(arena);
mps_arena_release(arena);
report("com", "%ld", com1);
report("inc2", "%ld", (com1-com)/BIGSIZE);
/* check initial frame is scanned */
p = allocone(sap, 2, mps_rank_exact());
q = allocdumb(ap, BIGSIZE, mps_rank_exact());
setref(p, 1, q);
q = allocdumb(ap, SMALLSIZE, mps_rank_exact());
mps_arena_collect(arena);
com2 = arena_committed_and_used(arena);
mps_arena_release(arena);
report("inc3", "%ld", (com2-com1)/BIGSIZE);
/* even in ordinary collection */
for (i=0; i < 500; i++) {
q = allocdumb(ap, BIGSIZE, mps_rank_exact());
}
q = allocdumb(ap, SMALLSIZE, mps_rank_exact());
mps_arena_collect(arena);
com2 = arena_committed_and_used(arena);
mps_arena_release(arena);
report("inc4", "%ld", (com2-com1)/BIGSIZE);
mps_ap_destroy(ap);
mps_ap_destroy(sap);
mps_pool_destroy(pool);
mps_pool_destroy(spool);
mps_chain_destroy(chain);
mps_fmt_destroy(format);
mps_thread_dereg(thread);
mps_arena_destroy(arena);
comment("Destroyed arena.");
}
示例15: test
static void test(void)
{
mps_arena_t arena;
mps_pool_t poolamc, poolawl;
mps_thr_t thread;
mps_root_t root, root1;
mps_fmt_t format;
mps_chain_t chain;
mps_ap_t apamc, apawl;
size_t size0, size1;
mycell *a, *b, *c, *d, *e, *f, *g;
int i;
int j;
RC;
deathcomments = 0;
cdie(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE),
"create arena");
die(mps_thread_reg(&thread, arena), "register thread");
die(mps_root_create_reg(&root, arena, mps_rank_ambig(), 0, thread,
mps_stack_scan_ambig, stackpointer, 0),
"create root");
cdie(
mps_root_create_table(&root1, arena, mps_rank_ambig(), 0, &exfmt_root, 1),
"create exfmt root");
die(mps_fmt_create_A(&format, arena, &fmtA), "create format");
cdie(mps_chain_create(&chain, arena, genCOUNT, testChain), "chain_create");
die(mmqa_pool_create_chain(&poolamc, arena, mps_class_amc(), format, chain),
"create pool");
cdie(
mps_pool_create(&poolawl, arena, mps_class_awl(), format, getassociated),
"create pool");
cdie(
mps_ap_create(&apawl, poolawl, mps_rank_weak()),
"create ap");
cdie(
mps_ap_create(&apamc, poolamc, mps_rank_exact()),
"create ap");
b = allocone(apamc, 1, 1);
for (j=1; j<10; j++) {
comment("%i of 10.", j);
a = allocone(apawl, 5, 1);
setref(b, 0, a);
b = a;
c = a;
d = a;
e = a;
f = a;
g = a;
for (i=1; i<1000; i++) {
if (i%100 == 0) {
comment(" %i", i);
}
if (ranint(2)) {
c = allocone(apamc, 1000, 1);
} else {
c = allocone(apawl, 1000, 1);
}
if (ranint(8) == 0) d = c;
if (ranint(8) == 0) e = c;
if (ranint(8) == 0) f = c;
if (ranint(8) == 0) g = c;
setref(b, 0, c);
setref(c, 1, d);
setref(c, 2, e);
setref(c, 3, f);
setref(c, 4, g);
b = c;
}
if (j==3) {
DC;
comment("...collecting:");
RC;
size0 = arena_committed_and_used(arena);
mps_arena_collect(arena);
size1 = arena_committed_and_used(arena);
report("sizebefore0", "%lu", (unsigned long) size0);
report("sizeafter0", "%lu", (unsigned long) size1);
report("diff0", "%lu", (unsigned long) size0-size1);
DC;
mps_arena_release(arena);
comment("...released");
}
DC;
comment("clamping...");
mps_arena_park(arena);
//.........这里部分代码省略.........