#include <stdio.h> #include <stdlib.h> #define NLIVE 1000000 #define NITERS (3*1000*1000) char* arr[NLIVE]; int main ( int argc, char* argv[] ) { int i, j, nbytes = 0; int pdb = 0; int jpdb; if (argc > 1) { pdb = atoi(argv[1]); } printf("initialising\n"); for (i = 0; i < NLIVE; i++) arr[i] = NULL; printf("running\n"); j = -1; for (i = 0; i < NITERS; i++) { j++; if (j == NLIVE) j = 0; if (arr[j]) free(arr[j]); arr[j] = malloc(nbytes); if (pdb > 0) { // create some partially defined bytes in arr[j] for (jpdb=0; jpdb<nbytes; jpdb = jpdb+pdb) { arr[j][jpdb] &= (jpdb & 0xff); } } // Cycle through the sizes 0,8,16,24,32. Zero will get rounded up to // 8, so the 8B bucket will get twice as much traffic. nbytes += 8; if (nbytes > 32) nbytes = 0; } for (i = 0; i < NLIVE; i++) if (arr[i]) free(arr[i]); printf("done\n"); return 0; }