今天对wcslen 做了下测试 发现vc CRT的wcslen 效率真的非常低,还是API高些
以下是对长度为 0x000016a3 的字符串做 1000000 次循环的结果
非对齐 (T2310)
mystrlenW wcslen lstrlenW
6282 28234 8859
对齐 (T2310)
6250 26375 8422
用汇编写的mystrlen1 使用简单的rep scasw 效率比lstrlenW差
用C写的mystrlenW,使用32位校正对齐方式,成绩略好于lstrlenW,但其功劳应归功于vc
VC9对C代码的优化程度可以看出编译器的工程师们水平登峰造极,查手册发现,其优化规则使用的指令竟然除了最长的shr之类为4个指令周期,其它都使用and or,甚至连 %都被优化成了or. 70~80%都是单指令周期
面strlen的效率比lstrlenA差,vc9也没有帮助我超过lstrlenA
通过测试可以发现如果有必须尽量使用API,毕竟它的使用率是最高的,所以应该都经过特别优化