您的位置:首页 > 编程语言 > Go语言

memcpy和memmove的区别

2009-05-10 14:52 267 查看
          最近一次笔试被问到了这个问题,一直没有使用过memmove,所以当时一直猜测memmove应该就是拷贝源地址的内容到目的地址,同时删除源地址的内容。这个猜测一直留着我的心里,也一直么有去验证它是否正确。

     直到跟一个网友聊到这个话题的时候,他要我说出它们之间的区别,我把我猜测的意思告诉他,他告诉我完全不是那么回事的时候,我发现我错了。

     查了下MSDN,和网上google了一下,发现它们之间的区别在与memmove可以处理内存折叠,就是说当目的地址与源地址空间重叠在一起的时候,memmove会在重叠区间被重写之前把原内容保存下来,可以很好的处理内存重叠问题。当使用memcpy时,如果目的地址空间在源地址空间的右边,即des<src的时候,如果目的地址空间与源地址空间区域有重叠,那么后面某些字符将会在被复制之前被覆盖掉,导致出错。

      所以,一般如果在不知道源地址与目的地址位置情况,并且目的地址在源地址后边的情况下,建议使用memmove函数。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  google