zoukankan      html  css  js  c++  java
  • 自己实现的库函数2(memset,memcmp,memcpy,memmove)

    memset,memcmp,memcpy,memmove是对内存进行管理的库函数,为了更好的理解和使用这几个函数,自己用C语言实现一下~

    //内存设置函数
    void* my_memset(void* dest, int c, size_t count)
    {
    assert(dest != NULL);
    char* pDest = (char*)dest;
    while (count-->0) //将内存中count个设置为c
    {
    *pDest++ = c;
    }
    return dest;
    }
    //内存比较函数
    int my_memcmp(void* src1, void* src2, int len)
    {
    assert(src1 != NULL && src2 != NULL);
    const char* pSrc1 = (char*)src1;
    const char* pSrc2 = (char*)src2;
    while (len-- > 0)
    {
    if (*pSrc1++ != *pSrc2++) //当内存中的数据不相等时,可以比较出大小,否则两指针继续向后指
    {
    return *pSrc1 < *pSrc2 ? -1 : 1;
    }
    }
    return 0; //相等则返回0
    }

    要重点说一下内坤拷贝和内存移动函数。。。
    memmove与memcpy都是将count个字节的源内存地址的内容拷贝到目标内存地址中,但当源内存和目的内存存在重叠时,memcpy会出现错误!memmove能正确拷贝,但也增加了一点点开销。
    //内存拷贝函数
    void* my_memcpy(void* dest, const void* src, size_t count)
    {
    assert(dest != NULL && src != NULL);
    char* pDest = (char*)dest;
    const char* pSrc = (const char*)src;
    while (count-- > 0)
    {
    *pDest++ = *pSrc++; //将pSrc指向的数据复制count个给pDest
    }
    return dest;
    }
    //内存移动函数
    void* my_memmove(void* dest, void* src, size_t count)
    {
    assert(dest != NULL && src != NULL);
    char* pDest = (char*)dest;
    const char* pSrc = (char*)src;
         if (pSrc >= pDest || pDest >= (pSrc + count))//当源内存地址在目的内存地址之后或者目的地址在源内存地址+count之后,可以正常拷贝
    	{

              while (count-- > 0)
    		{
    *pDest++ = *pSrc;
    }
    }
    	else     //否则需要从后覆盖往前拷贝,防止出现覆盖
        {
    		while (count-- > 0)


    {
    *(pDest + count) = *(pSrc + count);
    }
    }
    *pDest = '';
    return dest;
    }
    
    
  • 相关阅读:
    webpack 打包报 ERROR in static/js/vendor.2eff2b5a1d36f4b7f033.js from UglifyJs
    常见重构技巧
    Java常见重构技巧
    Python写基于非线性优化的2D-SLAM系统(已开源)
    分享一个免费开源压缩视频软件!!!【视频压缩后质量还可以】
    AJAX之超时与网络异常处理
    HTTP
    Gin多次读取body
    高效的数据压缩编码方式 Protobuf
    TCP报文之-tcp dup ack 、tcp Out-of-Order
  • 原文地址:https://www.cnblogs.com/guochuanrui/p/5374826.html
Copyright © 2011-2022 走看看