关于memcpy函数的超过效率
昨日闲来无事,研究一下memcpy的效率。memcpy在MEMCPY.c中给出的实现代码为:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */
/*
* copy from lower addresses to higher addresses
*/
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
#endif /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */
return(ret);
}
另外,本人用汇编写了个mymemcpy的实现代码。以以下三个对照测试:
1、将MEMCPY.c给出的的memcpy的c源程序代入mymemcpy函数重新编译;
2、用自己写的汇编mymemcpy编译;
3、直接调用系统的memcpy编译
所得到的效率如下:
1的效率最低,2的效率是1的效率的7倍,3的效率是2 的效率的4倍,是1效率的28倍。
所以,大家还是直接调用系统库函数ok了,无论用哪种语言,估计都难写出比库函数更高效的调用了。
奇怪的是c的memcpy原形函数效率竟然如此的低!
另外还有一点:(char *)这种强制类型转换是编译阶段完成,并不耗费运行时间。相反多定义个中间变量反倒使程序效率降低了。