最近同事给我看了一个内存拷贝测试程序,问我使用glibc库里的memcpy()函数为什么执行起来比较快,我被难住了,不知道该怎么回答,利用业余时间研究了一下代码,分析了一下memcpy为什么快,首先,我们先来看一下测试程序是怎么写的,考虑的篇幅的问题,只列出程序中关键的地方。#define unsigned long long ULL
/*按几个字节拷贝*/
forlooptest(UUL asize, ULL src, ULL dest)
{
UUL t;
for(t = 0; t < asize; t++)
b[t] = a[t];
}
/*调用memcpy来拷贝*/
memcpy(dest, src, asize * sizeof(ULL))
/*按单字节拷贝*/
char *psrc, *pdest;
psrc = (char *) src;
pdest = (char *) dest;
for(t=0; t < (asize * sizeof(long long)); t++)
pdest[t] = psrc[t];测试结果:for-loop test: 1290.472 MiB/s
memcpy function: 2844.896 MiB/s
byte copy: 195.009 MiB/s单字节拷贝这种
...
继续阅读
(20)