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+;
   src = (char *)src+;
  }
  #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 & ) {
char *cto = to;
const char *cfrom = from;
*cto++ = *cfrom++;
to = cto;
from = cfrom;
n--;
}
if (n > && (long)to & ) {
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
n -= ;
}
temp = n >> ;
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\n"
" andw #7,%3\n"
" lsrl #3,%2\n"
" negw %3\n"
" jmp %%pc@(1f,%3:w:2)\n"
"4: movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
" movel %0@+,%1@+\n"
"1: dbra %2,4b\n"
" clrw %2\n"
" subql #1,%2\n"
" jpl 4b"
: "=a" (lfrom), "=a" (lto), "=d" (temp), "=&d" (temp1)
: "" (lfrom), "" (lto), "" (temp));
  #endif
to = lto;
from = lfrom;
   }
  if (n & ) {
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
  }
   if (n & ) {
   char *cto = to;
   const char *cfrom = from;
   *cto = *cfrom;
   }
return xto;
}
05-27 16:38