1#include <stdio.h> 2#include <stdlib.h> 3 4#define NLIVE 1000000 5 6#define NITERS (3*1000*1000) 7 8char* arr[NLIVE]; 9 10int main ( void ) 11{ 12 int i, j, nbytes = 0; 13 printf("initialising\n"); 14 for (i = 0; i < NLIVE; i++) 15 arr[i] = NULL; 16 17 printf("running\n"); 18 j = -1; 19 for (i = 0; i < NITERS; i++) { 20 j++; 21 if (j == NLIVE) j = 0; 22 if (arr[j]) 23 free(arr[j]); 24 arr[j] = malloc(nbytes); 25 26 // Cycle through the sizes 0,8,16,24,32. Zero will get rounded up to 27 // 8, so the 8B bucket will get twice as much traffic. 28 nbytes += 8; 29 if (nbytes > 32) 30 nbytes = 0; 31 } 32 33 for (i = 0; i < NLIVE; i++) 34 if (arr[i]) 35 free(arr[i]); 36 37 printf("done\n"); 38 return 0; 39} 40