• 自己实现的内存处理函数


    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;    
    }
  • 相关阅读:
    练习上传下载时遇到的问题
    el表达式遇到的问题
    js中for循环闭包问题记录
    随机排座位(模板) 20.10.17
    #STL:优先队列数据结构函数的用法 #堆 #优先队列数据结构(堆) #priority_queue 20.10.17
    关于int的范围
    #归并排序 归并排序的刷题记录 ~20.09.25
    #欧拉函数 ~20.8.27
    #排列 #组合 ~20.8.24
    105.七夕祭
  • 原文地址:https://www.cnblogs.com/Blog-day/p/My_Blog_Days_33.html
Copyright © 2020-2023  润新知