memcopy和memmove函数在linux下看了一下两个函数的源码。
两个函数都在头文件string.h中定义,函数原型为:

void * __cdecl memcpy ( void * dst,const void * src,size_t count);
void * __cdecl memmove ( void * dst,const void * src,size_t count);

实现代码如下:

void * __cdecl memcpy ( void * dst,const void * src,size_t count)
{void * ret = dst;while (count--){  // 注意, memcpy函数没有处理dst和src区域是否重叠的问题*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}return(ret);
}
void * __cdecl memmove ( void * dst,const void * src,size_t count)
{void * ret = dst;if (dst <= src || (char *)dst >= ((char *)src + count)){  // 若dst和src区域没有重叠,则从起始处开始逐一拷贝while (count--){*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}}else{  // 若dst和src 区域交叉,则从尾部开始向起始位置拷贝,这样可以避免数据冲突dst = (char *)dst + count - 1;src = (char *)src + count - 1;while (count--){*(char *)dst = *(char *)src;dst = (char *)dst - 1;src = (char *)src - 1;}}return(ret);
}

总结一下:
当src和dst区域没有重叠时,两个函数是完全一样的。没有重叠的条件是:dst <= src || (char *)dst >= ((char *)src + count。否则,memcpy是不能正常工作的,memmove是可以正常工作的。因为memcpy不需要判断重叠,所以它运行速度比memmove快,在确定dst和src不重叠的情况下,可以用memcpy。

C++ memcpy和memmove实现相关推荐

  1. strcpy,memcpy和memmove区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy ...

  2. 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

    一.函数介绍: 1.memcpy 函数原型:extern void *memcpy(void *dest, const void *src, size_t count); 用法:#include< ...

  3. memcpy 头文件_C|memcpy()和memmove()的比较及实现

    memcpy()和memmove()函数的原型如下: void * memcpy ( void * dst, const void * src, size_t num ); void * memmov ...

  4. C和指针之字符串memcpy、memmove、memset使用总结

    1.介绍memcpy.memmove.memset 1) void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开 ...

  5. memcpy、memmove、memset、memchr、memcmp、strstr详解

    第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...

  6. 关于memcpy和memmove两函数的区别

    http://blog.csdn.net/caowei840701/article/details/8491836 [cpp] view plain copy <p> 关于memcpy和m ...

  7. memcpy和memmove的区别以及内存重叠问题

    memcpy和memmove的区别以及内存重叠问题 转自:https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数 ...

  8. C语言学习笔记---数据拷贝函数memcpy()和memmove()函数

      在C语言中拷贝字符串的时候通常可以使用strcpy()函数和strncpy()函数,这两个函数是专门针对字符串拷贝的.如果想要拷贝其他类型数组的话,可以使用memcpy()和memmove()函数 ...

  9. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现

    在前面的文章中,我已经对字符串函数进行了详细的介绍和模拟实现,今天,我来讲解另一类函数----------内存函数. 这里写目录标题 memcpy函数 memmove函数 memcmp函数 memse ...

  10. memcpy、memmove

    前言 一.memcpy 1.介绍 2.使用 3.模拟实现 二.memmove 1.介绍 2.模拟实现 三.总结 前言 上一文,学习了字符串相同函数的使用,在某些场合,数据的类型不限于字符串,有可能是整 ...

最新文章

  1. 《用Python进行自然语言处理》第2章 获得文本语料和词汇资源
  2. QTableWidget表头样式
  3. BZOJ4241 历史研究(莫队)
  4. HashMap和Hashtable
  5. spring-kafka整合:DefaultKafkaProducerFactory默认kafka生产者工厂介绍
  6. 你如何摆平秋季问题皮肤
  7. TF-IDF 提取文本关键词
  8. 如何利用php下载文件_PHP使用文件流下载文件方法
  9. zynq文档阅读之GPIO的中断
  10. MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新
  11. AHP(层次分析法)的全面讲解及python实现
  12. 概率论基础-严士健 第二版 习题与补充1.6答案
  13. 小程序图片实现自适应大小,超过部分自动裁剪
  14. js实现动态星空背景
  15. (转)The Neural Network Zoo
  16. 论文阅读《API2Com: On the Improvement of Automatically Generated Code Comments Using API Documentations》
  17. NavigationController
  18. 如何判断是否受到DDOS攻击?被攻击该如何解决?
  19. 如何改变坏习惯,形成新习惯
  20. VS源文件提取工具vsjuicer 实现细节

热门文章

  1. python编程培训多少钱-python编程培训多少钱?[python培训]
  2. python处理excel字典-python从excel创建字典
  3. python字符串写入excel-使用python将数据写入excel
  4. python语言命令大全-Python常用命令之集合
  5. python能处理多大的数据-Python 适合大数据量的处理吗?
  6. python timer使用-Python timer定时器两种常用方法解析
  7. RequestBodyAdvice和ResponseBodyAdvice
  8. LeetCode Kth Smallest Element in a BST(中序遍历)
  9. 英文文献中的一些单词
  10. tip use view.isineditmode() in your custom views to skip code when shown in eclipse