Car*_*rez 21 c string performance
如何有效(及时)计算C中字符串的长度?
现在我正在做:
int calculate_length(char *string) {
int length = 0;
while (string[length] != '\0') {
length++;
}
return length;
}
Run Code Online (Sandbox Code Playgroud)
但是与strlen()相比它很慢,例如,有没有其他方法可以做到这一点?
谢谢.
编辑:我在一个独立的环境中工作,我不允许使用任何外部库,包括"string.h".
And*_*mar 43
size_t
strlen(const char *str)
{
const char *s;
for (s = str; *s; ++s);
return(s - str);
}
Run Code Online (Sandbox Code Playgroud)
与您的代码相比,这可能非常好地映射到汇编指令,这可以解释一个很大的性能差异.
看一下标准libc中strlen的源代码.标准库中的函数通常是高度优化的.在这里查看(在汇编中编码) - 这是来自GNU libc.
size_t
DEFUN(strlen, (str), CONST char *str)
{
int cnt;
asm("cld\n" /* Search forward. */
/* Some old versions of gas need `repne' instead of `repnz'. */
"repnz\n" /* Look for a zero byte. */
"scasb" /* %0, %1, %3 */ :
"=c" (cnt) : "D" (str), "0" (-1), "a" (0));
return -2 - cnt;
}
Run Code Online (Sandbox Code Playgroud)
它使用了许多非显而易见的技巧来提高速度而不会降低到装配,包括:
等等
| 归档时间: |
|
| 查看次数: |
56206 次 |
| 最近记录: |