#include #include #include int main () { static int fib[] = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578 }; int pagesize = getpagesize(); int block_sizes[16]; int i; printf ("pagesize = 0x%X\n", pagesize); block_sizes[0] = pagesize / 4; block_sizes[1] = pagesize / 2 - 16; block_sizes[2] = pagesize / 2; block_sizes[3] = pagesize - 16; block_sizes[4] = pagesize; block_sizes[5] = pagesize * 3 / 2; block_sizes[6] = pagesize * 2; block_sizes[7] = pagesize * 5 / 2; block_sizes[8] = pagesize * 3; block_sizes[9] = pagesize * 4; block_sizes[10] = pagesize * 5; block_sizes[11] = pagesize * 8; block_sizes[12] = pagesize * 9; block_sizes[13] = pagesize * 16; block_sizes[14] = pagesize * 17; block_sizes[15] = pagesize * 32; for (i = 0; i < sizeof(fib)/sizeof(fib[0]); i++) { void *new_block = malloc (fib[i]); int j; printf ("After allocating %d bytes:\n", fib[i]); for (j = 0; j < sizeof(block_sizes)/sizeof(block_sizes[0]); j++) { int block_size = block_sizes[j]; void *p = malloc (block_size); printf (" size=0x%05X -> 0x%08lX\n", block_size, (unsigned long) p); free (p); } } return 0; }