memcpy内存拷贝的改进与优化

来源:互联网 发布:昆明到大理 汽车 知乎 编辑:程序博客网 时间:2024/05/01 14:14

原版:

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;        }    }}







原创粉丝点击