#include #include #include #include #include #define NOF_ELEM 1000000 #define STR_LEN 256 typedef char fixed_string[STR_LEN+1]; const char * gen_str() { static fixed_string s; for (size_t i = 0; i < sizeof(fixed_string)-1; ++i) { s[i] = rand() % 25 + 65; } s[sizeof(s)-1] = '\0'; return s; } int my_memcmp(const char* s1, const char* s2, size_t n) { if (!n) return 0; while (--n && *s1 == *s2) { ++s1; ++s2; } return *s1 - *s2; } int main() { clock_t begin, end; fixed_string * arr = malloc(sizeof(fixed_string) * NOF_ELEM); int * r1 = malloc(NOF_ELEM * sizeof(*r1)); int * r2 = malloc(NOF_ELEM * sizeof(*r2)); for (size_t i = 0; i < NOF_ELEM; ++i) { strncpy(arr[i], gen_str(), sizeof(*arr)-1); } /* memcmp */ begin = clock(); for (size_t i = 0; i < NOF_ELEM-1; ++i) { r1[i] = memcmp(arr[i], arr[i+1], sizeof(*arr)); } end = clock(); printf(" memcmp: %d\n", (end-begin) * CLOCKS_PER_SEC); /* my_memcmp */ begin = clock(); for (size_t i = 0; i < NOF_ELEM-1; ++i) { r2[i] = my_memcmp(arr[i], arr[i+1], sizeof(*arr)); } end = clock(); printf("my_memcmp: %d\n", (end-begin) * CLOCKS_PER_SEC); for (size_t i = 0; i < NOF_ELEM-1; ++i) { assert(r1[i] == r2[i]); } }