memcpy

来源:互联网 发布:高级研修班 知乎 编辑:程序博客网 时间:2024/06/07 06:26
//// Created by yudw on 2017/8/6.//#pragma once#include <iostream>#define debug_namespace yudw{    // 注意当内存有重叠时,src部分会被覆盖    void* memcpy(void *dst, const void* src, size_t size)    {        if(dst == nullptr || src == nullptr)        {            return nullptr;        }        char *pdst = static_cast<char*>(dst);        const char *psrc = static_cast<const char*>(src);        // 1.内存无重叠        // [dst + 0, dst + size -1] , [src + 0, src + size -1], [dst + 0, dst + size -1]        if(pdst + size <= src || pdst >= psrc + size)        {#ifdef debug_            std::cout<<"no cover:";#endif            while(size--)            {                *pdst++ = *psrc++;            }        }        else    // 2.内存有重叠        {            if(pdst < psrc)   // 2.1 dst 在左,有部分重叠,从前往后直接拷贝就行            {#ifdef debug_                std::cout<<"left cover:";#endif                while(size--)                {                    *pdst++ = *psrc++;                }            }            else    // 2.2 dst 在右侧, 有部分重叠,从后向前拷贝,src重复部分会被dst覆盖            {#ifdef debug_                std::cout<<"right cover:";#endif                while(size--)                {                    *(pdst + size) = *(psrc + size);                }            }        }        return dst;    }}
原创粉丝点击