main.c revision 88800
188800Skbyanc/* $FreeBSD: head/tools/test/malloc/main.c 88800 2002-01-02 06:42:34Z kbyanc $ */ 219192Sphk#include <stdlib.h> 319192Sphk#include <stdio.h> 419192Sphk#include <unistd.h> 519192Sphk 619192Sphku_long NBUCKETS = 2000; 719192Sphku_long NOPS = 200000; 819192Sphku_long NSIZE = (16*1024); 919192Sphk 1019192Sphkchar **foo; 1119192Sphk 1219192Sphkint 1319192Sphkmain(int argc, char **argv) 1419192Sphk{ 1519192Sphk int i,j,k; 1619192Sphk 1719192Sphk if (argc > 1) NOPS = strtoul(argv[1],0,0); 1819192Sphk if (argc > 2) NBUCKETS = strtoul(argv[2],0,0); 1919192Sphk if (argc > 3) NSIZE = strtoul(argv[3],0,0); 2019192Sphk printf("BRK(0)=%x ",sbrk(0)); 2119192Sphk foo = malloc (sizeof *foo * NBUCKETS); 2219192Sphk memset(foo,0,sizeof *foo * NBUCKETS); 2388800Skbyanc for (i = 1; i <= 4096; i *= 2) { 2419192Sphk for (j = 0 ; j < 40960/i && j < NBUCKETS; j++) { 2519192Sphk foo[j] = malloc(i); 2619192Sphk } 2719192Sphk for (j = 0 ; j < 40960/i && j < NBUCKETS; j++) { 2819192Sphk free(foo[j]); 2919192Sphk foo[j] = 0; 3019192Sphk } 3119192Sphk } 3219192Sphk 3319192Sphk for (i = 0 ; i < NOPS ; i++) { 3419192Sphk j = random() % NBUCKETS; 3588800Skbyanc k = random() % NSIZE; 3619192Sphk foo[j] = realloc(foo[j], k & 1 ? 0 : k); 3788800Skbyanc if (k & 1 || k == 0) { 3888800Skbyanc /* 3988800Skbyanc * Workaround because realloc return bogus pointer rather than 4088800Skbyanc * NULL if passed zero length. 4188800Skbyanc */ 4288800Skbyanc foo[j] = 0; 4388800Skbyanc } 4419192Sphk if (foo[j]) 4519192Sphk foo[j][0] = 1; 4619192Sphk } 4719192Sphk printf("BRK(1)=%x ",sbrk(0)); 4819192Sphk for (j = 0 ; j < NBUCKETS ; j++) { 4919192Sphk if (foo[j]) { 5019192Sphk free(foo[j]); 5119192Sphk foo[j] = 0; 5219192Sphk } 5319192Sphk } 5419192Sphk printf("BRK(2)=%x NOPS=%lu NBUCKETS=%lu NSIZE=%lu\n", 5519192Sphk sbrk(0),NOPS,NBUCKETS,NSIZE); 5619192Sphk return 0; 5719192Sphk} 58