/* * ISA 563, Spring 2011 * Copyleft by Muhammad Abdulla */ #include #include #include #include #include /* * large_args.c -- Demonstrates the speed-up when using call by reference for large data types */ #define MAX (100 * 1000) #define DATSIZE 10000 typedef enum { false, true } bool ; struct data { bool cleared; char dat[DATSIZE]; }; struct data clear_data_by_val(struct data d) { memset ( d.dat, 0, DATSIZE ); d.cleared = true; return d; } void clear_data_by_ref(struct data *d) { memset ( d->dat, 0, DATSIZE ); d->cleared = true; return; } // return time passed in milli-seconds double tp (struct timeval start, struct timeval end) { double t; t = 1000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000.0; return t; } int main (int argc, char *argv[] ) { struct timeval tv1; struct timeval tv2; int i; struct data d; gettimeofday(&tv1, NULL); for ( i = 0; i < MAX ; i++ ) { d = clear_data_by_val(d); } gettimeofday(&tv2, NULL); printf ( "time to clear data by val: %g (ms)\n", tp(tv1, tv2) ); gettimeofday(&tv1, NULL); for ( i = 0; i < MAX ; i++ ) { clear_data_by_ref(&d); } gettimeofday(&tv2, NULL); printf ( "time to clear data by ref: %g (ms)\n", tp(tv1, tv2) ); return 0; }