1adeb92a2SKelly Yancey /* $FreeBSD$ */ 29ee40678SPoul-Henning Kamp #include <stdlib.h> 39ee40678SPoul-Henning Kamp #include <stdio.h> 4*01ded8b9SRebecca Cran #include <string.h> 59ee40678SPoul-Henning Kamp #include <unistd.h> 69ee40678SPoul-Henning Kamp 79ee40678SPoul-Henning Kamp u_long NBUCKETS = 2000; 89ee40678SPoul-Henning Kamp u_long NOPS = 200000; 99ee40678SPoul-Henning Kamp u_long NSIZE = (16*1024); 109ee40678SPoul-Henning Kamp 119ee40678SPoul-Henning Kamp char **foo; 129ee40678SPoul-Henning Kamp 139ee40678SPoul-Henning Kamp int 149ee40678SPoul-Henning Kamp main(int argc, char **argv) 159ee40678SPoul-Henning Kamp { 16*01ded8b9SRebecca Cran u_long i,j,k; 179ee40678SPoul-Henning Kamp 189ee40678SPoul-Henning Kamp if (argc > 1) NOPS = strtoul(argv[1],0,0); 199ee40678SPoul-Henning Kamp if (argc > 2) NBUCKETS = strtoul(argv[2],0,0); 209ee40678SPoul-Henning Kamp if (argc > 3) NSIZE = strtoul(argv[3],0,0); 21*01ded8b9SRebecca Cran printf("BRK(0)=%p ", sbrk(0)); 22*01ded8b9SRebecca Cran foo = malloc(sizeof(*foo) * NBUCKETS); 23*01ded8b9SRebecca Cran memset(foo, 0, sizeof(*foo) * NBUCKETS); 24adeb92a2SKelly Yancey for (i = 1; i <= 4096; i *= 2) { 259ee40678SPoul-Henning Kamp for (j = 0; j < 40960/i && j < NBUCKETS; j++) { 269ee40678SPoul-Henning Kamp foo[j] = malloc(i); 279ee40678SPoul-Henning Kamp } 289ee40678SPoul-Henning Kamp for (j = 0; j < 40960/i && j < NBUCKETS; j++) { 299ee40678SPoul-Henning Kamp free(foo[j]); 30*01ded8b9SRebecca Cran foo[j] = NULL; 319ee40678SPoul-Henning Kamp } 329ee40678SPoul-Henning Kamp } 339ee40678SPoul-Henning Kamp 349ee40678SPoul-Henning Kamp for (i = 0; i < NOPS; i++) { 359ee40678SPoul-Henning Kamp j = random() % NBUCKETS; 369ee40678SPoul-Henning Kamp k = random() % NSIZE; 379ee40678SPoul-Henning Kamp foo[j] = realloc(foo[j], k & 1 ? 0 : k); 38adeb92a2SKelly Yancey if (k & 1 || k == 0) { 39adeb92a2SKelly Yancey /* 40adeb92a2SKelly Yancey * Workaround because realloc return bogus pointer rather than 41adeb92a2SKelly Yancey * NULL if passed zero length. 42adeb92a2SKelly Yancey */ 43*01ded8b9SRebecca Cran foo[j] = NULL; 44adeb92a2SKelly Yancey } 459ee40678SPoul-Henning Kamp if (foo[j]) 469ee40678SPoul-Henning Kamp foo[j][0] = 1; 479ee40678SPoul-Henning Kamp } 48*01ded8b9SRebecca Cran printf("BRK(1)=%p ", sbrk(0)); 499ee40678SPoul-Henning Kamp for (j = 0; j < NBUCKETS; j++) { 509ee40678SPoul-Henning Kamp if (foo[j]) { 519ee40678SPoul-Henning Kamp free(foo[j]); 52*01ded8b9SRebecca Cran foo[j] = NULL; 539ee40678SPoul-Henning Kamp } 549ee40678SPoul-Henning Kamp } 55*01ded8b9SRebecca Cran printf("BRK(2)=%p NOPS=%lu NBUCKETS=%lu NSIZE=%lu\n", 569ee40678SPoul-Henning Kamp sbrk(0), NOPS, NBUCKETS, NSIZE); 579ee40678SPoul-Henning Kamp return 0; 589ee40678SPoul-Henning Kamp } 59