c语言 - 使用 glibc 的 strlen()/strcmp() 还是基于 SSE4.2 推出自己的 strlen()/strcmp() 有益?



根据"使用"英特尔®;数据流单指令多数据扩展指令集4"(英特尔®;SSE4(的架构验证";(英特尔,2008([他们]添加了指令,以帮助一次对两个16字节的操作数进行字符搜索和比较。我用C编写了一些基本的strlen((和strcmp((函数,但它们似乎比glibc慢。

我可能想尝试使用内联汇编,看看我的项目在输入/输出XML方面的表现。

我已经读到(在这里(在strlen((之类的东西上使用SMID充满了潜在的问题(内存对齐(,所以我有点担心在生产代码中使用它。

glibc的实现将是无与伦比的。这些功能经过精心优化,包括汇编中手工编写的部分。下面是glibc使用AVX2指令对strcmp的x86_64实现。请注意,是800行:
https://github.com/lattera/glibc/blob/master/sysdeps/x86_64/multiarch/strcmp-avx2.S

有关更多详细信息,请参阅Peter Codes关于glibc实现的精彩解释。

最新更新