--- libelwix/example/test_mem.c 2013/01/17 10:05:35 1.1 +++ libelwix/example/test_mem.c 2024/04/15 10:42:26 1.6 @@ -1,12 +1,13 @@ #include +#include #include #include -void show(u_int size, u_int act, u_int inact) +int show(unsigned int size, unsigned int act, unsigned int inact, void *data, unsigned int dlen) { if (!act && !inact) - return; + return -1; if (size < 1024) printf("Statistics:: BUCKET %uB size, %u active, %u inactive\n", size, act, inact); @@ -14,6 +15,8 @@ void show(u_int size, u_int act, u_int inact) printf("Statistics:: BUCKET %uKB size, %u active, %u inactive\n", size / 1024, act, inact); else printf("Statistics:: BUCKET %uMB size, %u active, %u inactive\n", size / (1024 * 1024), act, inact); + + return 0; } int @@ -22,8 +25,10 @@ main(int argc, char **argv) mpool_t *mp; void *addr; int i; - u_long curr; + u_long curr, real; + printf("whether default memory mapper is elwix? %d\n", elwix_mm_inuse()); + for (i = 0; i < 3; i++) { addr = malloc(4000); printf("addr=%p\n", addr); @@ -36,10 +41,11 @@ main(int argc, char **argv) return 1; } /* - mpool_getquota(mp, &curr, NULL); + mpool_getquota(mp, &curr, NULL, NULL); printf("___current=%lu\n", curr); */ + printf(">>> get 3 allocs\n"); for (i = 0; i < 3; i++) { addr = mpool_malloc(mp, 4000, "mdaaa 4000"); if (!addr) { @@ -54,44 +60,48 @@ main(int argc, char **argv) // mpool_free(mp, addr, 0); } - mpool_getquota(mp, &curr, NULL); - printf("___current=%lu\n", curr); + mpool_getquota(mp, &curr, &real, NULL); + printf("___current=%lu ___real=%lu\n", curr, real); printf("0) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); - mpool_statistics(mp, show); + mpool_statistics(mp, show, NULL, 0); + printf(">>> realloc 4000 to 5010 addr=%p\n", addr); addr = mpool_realloc(mp, addr, 5010, "|||||||||||||"); if (!addr) printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError()); - mpool_getquota(mp, &curr, NULL); - printf("addr=%p_current=%lu\n", addr, curr); + mpool_getquota(mp, &curr, &real, NULL); + printf("addr=%p_current=%lu_real=%lu\n", addr, curr, real); printf("1) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); - mpool_statistics(mp, show); + mpool_statistics(mp, show, NULL, 0); + printf(">>> free addr=%p\n", addr); if (addr) mpool_free(mp, addr, 0); printf("2) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); - mpool_statistics(mp, show); + mpool_statistics(mp, show, NULL, 0); + printf(">>> purge inactive memory\n"); mpool_purge(mp, 0); - mpool_getquota(mp, &curr, NULL); - printf("___current=%lu\n", curr); + mpool_getquota(mp, &curr, &real, NULL); + printf("___current=%lu ___real=%lu\n", curr, real); printf("3) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); - mpool_statistics(mp, show); + mpool_statistics(mp, show, NULL, 0); + printf(">>> alloc new 4000\n"); addr = mpool_malloc(mp, 4000, "mdaaa 4000"); if (!addr) { printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError()); @@ -99,12 +109,30 @@ main(int argc, char **argv) return 2; } printf("addr=%p chkaddr=%d addr_size=%d\n", addr, mpool_chkaddr(addr), mpool_getsizebyaddr(addr)); + printf(">>> and free new 4000 addr=%p\n", addr); mpool_free(mp, addr, 0); printf("4) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); - mpool_statistics(mp, show); + mpool_statistics(mp, show, NULL, 0); + + + printf("realloc 4000 to 100000 and to 2000000\n"); + addr = mpool_malloc(mp, 4000, "mdaaa 4000"); + printf("malloc addr=%p chkaddr=%d addr_size=%d\n", addr, mpool_chkaddr(addr), mpool_getsizebyaddr(addr)); + addr = mpool_realloc(mp, addr, 100000, "ohche"); + printf("realloc addr=%p chkaddr=%d addr_size=%d\n", addr, mpool_chkaddr(addr), mpool_getsizebyaddr(addr)); + addr = mpool_realloc(mp, addr, 2000000, NULL); + printf("realloc addr=%p chkaddr=%d addr_size=%d\n", addr, mpool_chkaddr(addr), mpool_getsizebyaddr(addr)); + mpool_free(mp, addr, 0); + printf("5) calls.act=%lu calls.inact=%lu calls.free=%lu; bytes.act=%lu bytes.inact=%lu bytes.free=%lu;\n", + mp->pool_calls.alloc, mp->pool_calls.cache, mp->pool_calls.free, + mp->pool_bytes.alloc, mp->pool_bytes.cache, mp->pool_bytes.free); + mpool_statistics(mp, show, NULL, 0); + + + mpool_dump(mp, NULL); mpool_destroy(&mp); return 0; }