• 内存拷贝函数 memcpy


    windows下实现:

    void* __cdecl memcpy(void* dst,const void* src,size_t count)
    {
        void*ret=dst;
      #if defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)
      {
           extern void RtlMoveMemory(void *,const void *,size_t count);
           RtlMoveMemory(dst,src,count);
      }
      #else /*defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)*/
      /*
      *copy from lower addresses to higher addresses
      */
      while(count--){
          *(char *)dst = *(char *)src;
          dst = (char *)dst+1;
          src = (char *)src+1;
      }
      #endif  /*defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)*/
      return (ret);
    }

    liunx下实现的代码:

    void *memcpy(void *to, const void *from, size_t n)
    {
       //记录拷贝目的位置,为了返回拷贝内容的首地址
    void *xto = to; size_t temp, temp1;  
       //判断拷贝的字节数
    if (!n) return xto;
       //
    if ((long)to & 1) { char *cto = to; const char *cfrom = from; *cto++ = *cfrom++; to = cto; from = cfrom; n--; } if (n > 2 && (long)to & 2) { short *sto = to; const short *sfrom = from; *sto++ = *sfrom++; to = sto; from = sfrom; n -= 2; } temp = n >> 2; if (temp) { long *lto = to; const long *lfrom = from;   #if defined(CONFIG_M68000) || defined(CONFIG_COLDFIRE) for (; temp; temp--) *lto++ = *lfrom++;   #else asm volatile ( " movel %2,%3 " " andw #7,%3 " " lsrl #3,%2 " " negw %3 " " jmp %%pc@(1f,%3:w:2) " "4: movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " " movel %0@+,%1@+ " "1: dbra %2,4b " " clrw %2 " " subql #1,%2 " " jpl 4b" : "=a" (lfrom), "=a" (lto), "=d" (temp), "=&d" (temp1) : "0" (lfrom), "1" (lto), "2" (temp));   #endif to = lto; from = lfrom;    }   if (n & 2) { short *sto = to; const short *sfrom = from; *sto++ = *sfrom++; to = sto; from = sfrom;   }    if (n & 1) {    char *cto = to;    const char *cfrom = from;    *cto = *cfrom;    } return xto; }
  • 相关阅读:
    C语言丨博客作业10
    C语言博客作业09
    C语言博客作业08
    闽江学院软件学院2019-2020《创新思维》课程预告(20200412)
    C语言和数据结构的书单-再次推荐
    2019-2020创新思维初探(IT | Design |Think)书单(更新ING)
    闽江学院软件学院2016级JAVA构建之法-学生自学兴趣小组招募通知
    2014软件工程专业-职业能力调查(作业)
    软件第二次结对作业
    软件第一次结对作业
  • 原文地址:https://www.cnblogs.com/goul/p/10191705.html
Copyright © 2020-2023  润新知