【发布时间】:2011-09-28 21:15:42
【问题描述】:
我正在阅读“Write Great Code Volume 2”,它显示了以下 strlen 实施:
int myStrlen( char *s )
{
char *start;
start = s;
while( *s != 0 )
{
++s;
}
return s - start;
}
这本书说这种实现对于没有经验的 C 程序员来说是典型的。在过去的 11 年里,我一直在用 C 编写代码,但我看不出如何在 C 中编写比这更好的函数(我可以想到在汇编中编写更好的东西)。怎么可能用 C 写出比这更好的代码呢?我查看了 glibc 中 strlen 函数的标准库实现,但我无法理解其中的大部分内容。在哪里可以找到有关如何编写高度优化的代码的更好信息?
【问题讨论】:
-
您确定这是优化问题吗?还是只是标准的安全问题?
-
@Victor 不要相信你读到的一切。该功能很快足够。
-
我曾经在一个 i386 系统的汇编程序中编写了
strlen(),该系统使用 CPU 字符串 (REP) 操作码,运行速度比优化的 C 代码快 6 倍。 -
@Loadmaster:你能把这段代码贴出来吗?
-
我反对
ptrdiff_t到int的演员阵容,是的,你可能没有将 2GB 字符串传递给strlen(),但它仍然很草率。此外,编译器可能会从int i=0; while(s[i]) i++; return i;生成更好的代码,因为它可以更多地了解您正在使用指针做什么(即它可以更好地分析该循环)。
标签: c string optimization pointers c-strings