大佬教程收集整理的这篇文章主要介绍了内存拷贝函数 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) {@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,请注明来意。