新闻| 论坛| 博客| 在线研讨会
c语言如何实现内存复制
电子禅石| 2021-08-31 14:57:29 阅读:1515 发布文章

void *memmove(void *dest, const void *src, size_t count)
{
assert((src != NULL)&&(dest != NULL));
char *tmp, *s;

   if (dest <= src)
{
tmp = (char *) dest;
s = (char *) src;
     while (count--)
*tmp++ = *s++;
}
else {
tmp = (char *) dest + count;
s = (char *) src + count;
     while (count--)
*--tmp = *--s;
}
   return dest;

}



 在标准C库里string.h函数一般用汇编写,以求高效率。 看看这段:

#define _STRING_C
#include
#undef memmove

void *memmove(void * dest,const void *src,size_t count)
{
  if (dest < src) {
   __inline_memcpy(dest,src,count);
   } else {
unsigned long d0, d1, d2;
  __asm__ __volatile__(
"std\n\t"
"rep\n\t"
"movsb\n\t"
"cld"
: "=&c" (d0), "=&S" (d1), "=&D" (d2)
:"0" (count),
"1" (count-1+(const char *)src),
"2" (count-1+(char *)dest)
:"memory");
  }
return dest;
}


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客