代码一:
void *memcpy( void *dest, const void *src, size_t count )
{
ASSERT((dest != NULL)&&(src != NULL));
char *temp_dest = (char *)dest;
char *temp_src = (char *)src;
while(count--) // 不对是否存在重叠区域进行判断
{
*temp_dest++ = *temp_src++;
}
return dest;
}
代码二:
void* memcpy(void* dest, void* source, size_t count)
{
void* ret = dest;
if (dest <= source || dest >= (source + count))
{
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while (count --)
*dest++ = *source++;
}
else
{
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--)
*dest-- = *source--;l
}
return ret;
}
代码三:
void memcpy(void* dest, const void* src, size_t n)
{
assert((((uintptr_t) dest | (uintptr_t) src | n) & 0x03) == 0);
uint32_t* d = (uint32_t*) dest;
const uint32_t* s = (uint32_t*) src;
n /= sizeof(uint32_t);
if (d < s) {
/* copy forward */
while (n--) {
*d++ = *s++;
}
} else {
/* copy backward */
d += n;
s += n;
while (n--) {
*--d = *--s;
}
}
}
ref:http://snake-hand.iteye.com/blog/1522972