手写FASM字符串长度函数比GCC编译版本慢1.5倍的原因排查
x64 Windows平台手写FASM strlen函数性能慢于GCC编译版本的排查思路求助
我用FASM编写了x64(Windows ABI)平台下的字符串长度函数,逻辑如下:
- 先检查输入字符串是否8字节对齐
- 未对齐则逐个检查前几个字符,直到将指针对齐至8字节边界
- 之后以8字节为批量单位检查字符串结束符
但测试发现,该手写汇编函数比GCC编译的同逻辑C版本慢1.5倍:测试环境为i7-7800X,针对长度336的字符串执行1000万次循环,手写版本耗时0.772s,GCC版本耗时0.522s。我已将跳转标签对齐至16字节,仍无法定位性能差异原因,寻求问题排查思路。
手写FASM代码
; 此处粘贴手写FASM代码
GCC生成的汇编代码
; 此处粘贴GCC生成的汇编代码
C实现代码
// 此处粘贴C版本实现代码
测试程序
// 此处粘贴测试程序代码
内容的提问来源于stack exchange,提问作者HelloGUI
相关产品推荐
相关产品推荐

