main.c revision 19192
119192Sphk#include <stdlib.h>
219192Sphk#include <stdio.h>
319192Sphk#include <unistd.h>
419192Sphk
519192Sphku_long NBUCKETS		= 2000;
619192Sphku_long NOPS		= 200000;
719192Sphku_long NSIZE		= (16*1024);
819192Sphk
919192Sphkchar **foo;
1019192Sphk
1119192Sphkint
1219192Sphkmain(int argc, char **argv)
1319192Sphk{
1419192Sphk    int i,j,k;
1519192Sphk
1619192Sphk    if (argc > 1) NOPS     = strtoul(argv[1],0,0);
1719192Sphk    if (argc > 2) NBUCKETS = strtoul(argv[2],0,0);
1819192Sphk    if (argc > 3) NSIZE	   = strtoul(argv[3],0,0);
1919192Sphk    printf("BRK(0)=%x ",sbrk(0));
2019192Sphk    foo = malloc (sizeof *foo * NBUCKETS);
2119192Sphk    memset(foo,0,sizeof *foo * NBUCKETS);
2219192Sphk    for (i = 1; i <= 4096; i+=i) {
2319192Sphk        for (j = 0 ; j < 40960/i && j < NBUCKETS; j++) {
2419192Sphk	    foo[j] = malloc(i);
2519192Sphk        }
2619192Sphk        for (j = 0 ; j < 40960/i && j < NBUCKETS; j++) {
2719192Sphk	    free(foo[j]);
2819192Sphk	    foo[j] = 0;
2919192Sphk        }
3019192Sphk    }
3119192Sphk
3219192Sphk    for (i = 0 ; i < NOPS ; i++) {
3319192Sphk	j = random() % NBUCKETS;
3419192Sphk        k = random() % NSIZE;
3519192Sphk	foo[j] = realloc(foo[j], k & 1 ? 0 : k);
3619192Sphk	if (foo[j])
3719192Sphk	    foo[j][0] = 1;
3819192Sphk    }
3919192Sphk    printf("BRK(1)=%x ",sbrk(0));
4019192Sphk    for (j = 0 ; j < NBUCKETS ; j++) {
4119192Sphk	if (foo[j]) {
4219192Sphk	    free(foo[j]);
4319192Sphk	    foo[j] = 0;
4419192Sphk	}
4519192Sphk    }
4619192Sphk    printf("BRK(2)=%x NOPS=%lu NBUCKETS=%lu NSIZE=%lu\n",
4719192Sphk	sbrk(0),NOPS,NBUCKETS,NSIZE);
4819192Sphk    return 0;
4919192Sphk}
50