File:
[ELWIX - Embedded LightWeight unIX -] /
libelwix /
example /
test_mem.c
Revision
1.5:
download - view:
text,
annotated -
select for diffs -
revision graph
Wed Jul 1 21:48:39 2015 UTC (9 years, 2 months ago) by
misho
Branches:
MAIN
CVS tags:
elwix5_9,
elwix5_8,
elwix5_7,
elwix5_6,
elwix5_5,
elwix5_4,
elwix5_3,
elwix5_2,
elwix5_11,
elwix5_10,
elwix5_1,
elwix5_0,
elwix4_9,
elwix4_8,
elwix4_7,
elwix4_6,
elwix4_5,
elwix4_4,
elwix4_3,
elwix4_26,
elwix4_25,
elwix4_24,
elwix4_23,
elwix4_22,
elwix4_21,
elwix4_20,
elwix4_2,
elwix4_19,
elwix4_18,
elwix4_17,
elwix4_16,
elwix4_15,
elwix4_14,
elwix4_13,
elwix4_12,
elwix4_11,
elwix4_10,
elwix4_1,
elwix3_9,
HEAD,
ELWIX5_9,
ELWIX5_8,
ELWIX5_7,
ELWIX5_6,
ELWIX5_5,
ELWIX5_4,
ELWIX5_3,
ELWIX5_2,
ELWIX5_10,
ELWIX5_1,
ELWIX5_0,
ELWIX4_9,
ELWIX4_8,
ELWIX4_7,
ELWIX4_6,
ELWIX4_5,
ELWIX4_4,
ELWIX4_3,
ELWIX4_26,
ELWIX4_25,
ELWIX4_24,
ELWIX4_23,
ELWIX4_22,
ELWIX4_21,
ELWIX4_20,
ELWIX4_2,
ELWIX4_19,
ELWIX4_18,
ELWIX4_17,
ELWIX4_16,
ELWIX4_15,
ELWIX4_14,
ELWIX4_13,
ELWIX4_12,
ELWIX4_11,
ELWIX4_10,
ELWIX4_1,
ELWIX4_0,
ELWIX3_8
version 3.8
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <elwix.h>
void show(u_int size, u_int act, u_int inact)
{
if (!act && !inact)
return;
if (size < 1024)
printf("Statistics:: BUCKET %uB size, %u active, %u inactive\n", size, act, inact);
else if (size < 1024 * 1024)
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);
}
int
main(int argc, char **argv)
{
mpool_t *mp;
void *addr;
int i;
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);
free(addr);
}
mp = mpool_init(0);
if (!mp) {
printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError());
return 1;
}
/*
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) {
printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError());
mpool_destroy(&mp);
return 2;
}
printf("addr=%p chkaddr=%d addr_size=%d\n", addr, mpool_chkaddr(addr), mpool_getsizebyaddr(addr));
strlcpy(addr, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\ndddddd\n",
mpool_getsizebyaddr(addr));
// mpool_free(mp, addr, 0);
}
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);
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, &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);
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);
printf(">>> purge inactive memory\n");
mpool_purge(mp, 0);
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);
printf(">>> alloc new 4000\n");
addr = mpool_malloc(mp, 4000, "mdaaa 4000");
if (!addr) {
printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError());
mpool_destroy(&mp);
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);
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);
mpool_dump(mp, NULL);
mpool_destroy(&mp);
return 0;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>