这两个 strlen 函数是否都转换为相同的汇编代码?

Do both of these strlen functions translate to the same assembly code?

我有 2 个不同版本的 strlen,它们应该做同样的事情,但我不确定哪个更快、更易读或更节能。

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

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

或者他们只是翻译成相同的汇编代码?

你的两个函数的时间复杂度都是O(n)。因此,从理论上讲,关于按时性能,它们都将花费几乎相同的时间来计算。虽然标准 strlen 函数的时间复杂度也是 O(n) 但它可能具有更高的效率。 看看 this.