У меня есть две разные версии strlen, которые должны делать одно и то же, но я не уверен, какая из них будет быстрее, читабельнее или энергоэффективнее.

//version 1
size_t strlen(const char *str) {
   size_t retval;
   for(retval = 0; *str != '\0'; str++) retval++;
   return retval;
}

//version2
size_t strlen(const char *str) {
   const char *s;
   for (s = str; *s; ++s);
   return(s - str);
}

Или они просто переведут на тот же ассемблерный код?

-3
Adminy 20 Июн 2018 в 11:15

1 ответ

Лучший ответ

Временная сложность обеих ваших функций равна O(n). Таким образом, что касается производительности по времени, теоретически для обоих вычислений потребуется почти одинаковое время. Хотя временная сложность стандартной функции strlen также равна O(n), но она может иметь большую эффективность. Взгляните на этот < / а>.

0
Mat 20 Июн 2018 в 08:27