这两个 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.
我有 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.