zoukankan      html  css  js  c++  java
  • 自己实现的内存处理函数

    1、void* memcpy(void*dst,void const *src,size_t length)

    从src的起始位置起复制length个字节到dst的内存起始位置,如果src和dst以任何形式出现重叠,结果未定义。

    void* my_memcpy(void *dest, void const *src, size_t length)
    {
        assert(dest!= NULL&&src != NULL);
        char *pdest = (char*)dest;
        const char *psrc = (char*)src;
        while (length--)
        {
            *pdest++ = *psrc++;
        }
        return dest;
    }

    2、void* memmove(void*dst,void const *src,size_t length)

    从src的起始位置起复制length个字节到dst内存起始的位置,如果源和目标参数可能存在重叠,应使用mommove。

    void* my_memmove(void *dest, void const *src, size_t length)
    {
        assert(dest != NULL&&src != NULL);
        char *pdest = (char*)dest;
        const char *psrc = (char*)src;
        if (psrc + length <= pdest || src >= pdest)//可以正常赋值
        {
            while (length--)
            {
                *pdest++ = *psrc++;
            }
        }
        else//不能从前往后的赋值,有重叠的情况
        {
            while (length-- )
            {
                *(pdest + length) = *(psrc + length);
            }
        }
        *pdest = '';
        
        return dest;
    }

    3、void* memcpy(void*dst,void const *src,size_t length)

    注意:因为按照无符号字符逐字节进行比较,如果不用于单字节比较的数据如(int,float),会出现意料之外的结果

    int my_memcmp(void* src1, void* src2, int length)
    {
        assert(src1 != NULL && src2 != NULL);
        const char* pSrc1 = (char*)src1;
        const char* pSrc2 = (char*)src2;
        while (length-- > 0)
        {
            if (*pSrc1++ != *pSrc2++)   
            {
                return *pSrc1 < *pSrc2 ? -1 : 1;
            }
        }
        return 0;  
    }

    4、void* memset(void*dst,int ch,size_t length)

    void* my_memset(void* dest, int ch, size_t length)
    {
        assert(dest != NULL);
        char* pDest = (char*)dest;
        while (length--)   
        {
            *pDest++ = c;
        }
        return dest;    
    }
  • 相关阅读:
    P2602 [ZJOI2010]数字计数
    P2657 [SCOI2009] windy 数
    Gym
    B
    Problem E The League of Sequence Designers
    C. Vladik and fractions
    hdu6069
    hdu 6096
    30道经典面试题,靠它我在一线拿到了20k的前端开发工程师岗位
    【面经分享】互联网寒冬,7面阿里,终获Offer!
  • 原文地址:https://www.cnblogs.com/Blog-day/p/My_Blog_Days_33.html
Copyright © 2011-2022 走看看