简单的写了一下
int _memcpy(void *dest, void *src, size_t count)
{
if( !dest || !src || dest == src )
return 0;
char * p_d = static_cast<char*>(dest);
char * p_s = static_cast<char*>(src);
//内存地址出现覆盖的情况
if( p_d > p_s && p_s + count > p_d) {
int need = p_s + count - p_d;
int offset = p_d - p_s;
char * p_cache = new char(need);
int i = 0;
for(i=0; i<need; i++)
*(p_cache+i) = *(p_s+offset+i);
for(i=0; i<offset; i++)
*(p_d+i) = *(p_s+i);
for(i=0; i<need; i++)
*(p_d+offset+i) = *(p_cache+i);
delete[] p_cache;
} else {
while(count--) {
*(p_d++) = *(p_s++);
}
}
return 1;
}