问问题
14830 次
4 回答
31
为什么你认为strstr
应该比所有其他人都慢?你知道strstr
使用什么算法吗?我认为很有可能使用这种类型或更好strstr
的微调的、特定于处理器的、汇编编码的算法。KMP
在这种情况下,您没有机会在C
如此小的基准测试中超越它。
(我认为这可能是因为程序员喜欢实现这样的东西。)
于 2011-09-28T17:20:35.783 回答
18
于 2011-10-22T06:21:33.950 回答
3
没有看到你的代码,很难说清楚。 strstr
进行了高度优化,通常用汇编语言编写。它执行诸如一次读取数据 4 个字节并比较它们(如果对齐不正确,则必要时进行位旋转)以最小化内存延迟的事情。它还可以利用 SSE 之类的东西一次加载 16 个字节。如果您的代码一次只加载一个字节,它可能会被内存延迟杀死。
使用您的调试器并逐步进行反汇编strstr
——您可能会在其中发现一些有趣的东西。
于 2011-09-28T17:21:56.237 回答
2
想象一下,你想要清理一些东西。你可以自己清洗,也可以雇十个专业的清洁工来清洗。如果清洁工作是办公楼,则后一种解决方案更可取。如果清洁工作是一扇窗户,那么前者会更好。
您为高效完成工作所花费的时间永远不会得到任何回报,因为这项工作不会花费很长时间。
于 2011-09-28T17:19:39.893 回答