首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更快的strlen?

更快的strlen?
EN

Stack Overflow用户
提问于 2009-11-21 15:08:33
回答 9查看 8.1K关注 0票数 12

典型的strlen()从第一个字符开始遍历,直到找到\0。这要求您遍历每个字符。在算法意义上,它的O(N)。

在输入定义模糊的情况下,有没有更快的方法来做到这一点。Like:长度将小于50,或者长度将在200个字符左右。

我想到了查找块和所有的,但没有得到任何优化。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-11-21 17:39:30

实际上,strlenglibc's implementation是向量化方法的一个有趣的例子。它的独特之处在于它不使用矢量指令,但找到了一种方法,只使用来自缓冲区的32或64位字的普通指令。

票数 21
EN

Stack Overflow用户

发布于 2009-11-21 15:12:00

好的。在向字符串写入数据时,请跟踪字符串的长度。

票数 27
EN

Stack Overflow用户

发布于 2009-11-21 15:14:26

显然,如果你的字符串有一个已知的最小长度,你可以从这个位置开始搜索。

除此之外,您实际上什么也做不了;如果您试图做一些聪明的事情并找到一个\0字节,那么您仍然需要检查字符串开头和该点之间的每个字节,以确保没有更早的\0

这并不是说strlen不能优化。它可以是流水线的,并且可以在每次比较时处理字长或向量块。在大多数架构上,这些方法和其他方法的某种组合将在一个简单的字节比较循环上产生显著的恒定因子加速比。当然,在大多数成熟的平台上,已经使用这些技术实现了系统strlen

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1774791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档