memcpy函数用于拷贝内存,但是该函数天生带有缺陷,即没有考虑内存重叠的情况。改进版拷贝速率比memcpy拷贝速率慢。
// 内存拷贝函数改进版,考虑内存重叠情况
void *memcpyEx(void *dst, const void *src, size_t len)
{
if (dst == NULL || src == NULL)
return NULL;
void *ret = dst;
if (dst <= src || (char *)dst >= (char *)src + len)
{
// 无内存重叠,从低地址开始复制
while( len-- )
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
}
else
{
// 内存重叠,从高地址开始复制
src = (char *)src + len - 1;
dst = (char *)dst + len - 1;
while( len-- )
{
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
return ret;
}