wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了内存拷贝函数 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 *,co

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)
{@H_944_111@   //记录拷贝目的位置,为了返回拷贝内容的首地址
    void *xto = to;
    size_t temp,temp1;
  @H_944_111@   //判断拷贝的字节数
    if (!n)
        return xto;@H_944_111@   //
    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 (
            @H_944_227@"@H_944_227@    movel %2,%3\n@H_944_227@"
            @H_944_227@"@H_944_227@    andw  #7,%3\n@H_944_227@"
            @H_944_227@"@H_944_227@    lsrl  #3,%2\n@H_944_227@"
            @H_944_227@"@H_944_227@    negw  %3\n@H_944_227@"
            @H_944_227@"@H_944_227@    jmp   %%[email protected](1f,%3:w:2)\n@H_944_227@"
            @H_944_227@"@H_944_227@4:    movel %@L_772_7@+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%@L_404_12@+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@    movel %[email protected]+,%[email protected]+\n@H_944_227@"
            @H_944_227@"@H_944_227@1:    dbra  %2,4b\n@H_944_227@"
            @H_944_227@"@H_944_227@    clrw  %2\n@H_944_227@"
            @H_944_227@"@H_944_227@    subql #1,%2\n@H_944_227@"
            @H_944_227@"@H_944_227@    jpl   4b@H_944_227@"
            : @H_944_227@"@H_944_227@=a@H_944_227@" (lfrom),@H_944_227@"@H_944_227@=a@H_944_227@" (lto),@H_944_227@"@H_944_227@=d@H_944_227@" (temp),@H_944_227@"@H_944_227@=&d@H_944_227@" (temp1)
            : @H_944_227@"@H_944_227@0@H_944_227@" (lfrom),@H_944_227@"@H_944_227@1@H_944_227@" (lto),@H_944_227@"@H_944_227@2@H_944_227@" (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;
}

大佬总结

以上是大佬教程为你收集整理的内存拷贝函数 memcpy全部内容,希望文章能够帮你解决内存拷贝函数 memcpy所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。