#include #include #include #include void x_none(char * restrict a, const char * restrict b); void x_memcpy(char * restrict a, const char * restrict b); void x_strncpy(char * restrict a, const char * restrict b); void x_strlcpy(char * restrict a, const char * restrict b); void x_strlenmemcpy(char * restrict a, const char * restrict b); #ifndef ALIGN # define ALIGN 0 #endif int main () { char *a = malloc(N * 64 + ALIGN + ALIGN); char *b = malloc(N * 64 + ALIGN + ALIGN); if (a == 0 || b == 0) printf("malloc failed.\n"); struct timeval start, end; int i; for (i = 0; i < N; i++) strncpy(&b[i * 64 + ALIGN], STRING, 64); printf("NONE: "); gettimeofday(&start, 0); for (i = 0; i < 100000000; i++) x_none(&a[(i % N) * 64 + ALIGN], &b[(i % N) * 64 + ALIGN]); gettimeofday(&end, 0); printf("%10d us\n", (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec)); printf("MEMCPY: "); gettimeofday(&start, 0); for (i = 0; i < 100000000; i++) x_memcpy(&a[(i % N) * 64 + ALIGN], &b[(i % N) * 64 + ALIGN]); gettimeofday(&end, 0); printf("%10d us\n", (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec)); printf("STRNCPY: "); gettimeofday(&start, 0); for (i = 0; i < 100000000; i++) x_strncpy(&a[(i % N) * 64 + ALIGN], &b[(i % N) * 64 + ALIGN]); gettimeofday(&end, 0); printf("%10d us\n", (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec)); printf("STRLCPY: "); gettimeofday(&start, 0); for (i = 0; i < 100000000; i++) x_strlcpy(&a[(i % N) * 64 + ALIGN], &b[(i % N) * 64 + ALIGN]); gettimeofday(&end, 0); printf("%10d us\n", (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec)); printf("LENCPY: "); gettimeofday(&start, 0); for (i = 0; i < 100000000; i++) x_strlenmemcpy(&a[(i % N) * 64 + ALIGN], &b[(i % N) * 64 + ALIGN]); gettimeofday(&end, 0); printf("%10d us\n", (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec)); return 0; }