性能优化陷阱之hash真的比strcmp快吗

最近网上冲浪的时候看到有人分享了自己最近一次性能优化的经验。我向来对性能是比较敏感的,所以就点进去看了。
然而我越看越觉得蹊跷,但本着“性能问题和性能优化要靠性能测试做依据”,我不能凭空怀疑别人吧,所以我做了完整的测试并写下了这篇文章。
可疑的优化方案
分享者遇到的问题很简单:他发现程序中超过一半的时间花在strcmp上,并且在抓取调用栈等深入分析之后,他发现大部分strcmp调用都是在拿各种字符串和某个固定的字符串(比如表示成功状态的“success”)进行比较,因此他想能不能针对这进行优化。
这里稍微给不熟悉c/c++的人解释下,strcmp函数用来比较两个字符串的大小,当两个字符串相同的时候,函数会返回0,c语言里想要判断两个字符串的内容是否相同只能使用这个函数。
好了,背景交代完,我们来看看他的优化方案:

既然经常和固定的字符串比较,那是不是能节约掉这样的strcmp调用呢?
我们可以利用hash函数计算出的hash值,先计算出那个固定的字符串的hash值存下来,然后再计算与它比较的字符串的hash值;
现在strcmp就转换成两个hash值的比较了,不相同的hash值一定意......

版权声明:cnblogshot 发表于 2024-05-27 22:04:11。
转载请注明:性能优化陷阱之hash真的比strcmp快吗 | 程序员导航网

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...