典型的strlen()从第一个字符开始遍历,直到找到\0。这要求您遍历每个字符。在算法意义上,它的O(N)。
在输入定义模糊的情况下,有没有更快的方法来做到这一点。Like:长度将小于50,或者长度将在200个字符左右。
我想到了查找块和所有的,但没有得到任何优化。
发布于 2009-11-21 17:39:30
实际上,strlen的glibc's implementation是向量化方法的一个有趣的例子。它的独特之处在于它不使用矢量指令,但找到了一种方法,只使用来自缓冲区的32或64位字的普通指令。
发布于 2009-11-21 15:12:00
好的。在向字符串写入数据时,请跟踪字符串的长度。
发布于 2009-11-21 15:14:26
显然,如果你的字符串有一个已知的最小长度,你可以从这个位置开始搜索。
除此之外,您实际上什么也做不了;如果您试图做一些聪明的事情并找到一个\0字节,那么您仍然需要检查字符串开头和该点之间的每个字节,以确保没有更早的\0。
这并不是说strlen不能优化。它可以是流水线的,并且可以在每次比较时处理字长或向量块。在大多数架构上,这些方法和其他方法的某种组合将在一个简单的字节比较循环上产生显著的恒定因子加速比。当然,在大多数成熟的平台上,已经使用这些技术实现了系统strlen。
https://stackoverflow.com/questions/1774791
复制相似问题