文章插图
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确 。二者的c语言实现很简单,有兴趣的朋友可以去看看 。在实际情况下,这两个函数都是用汇编实现的 。memmove在copy两个有重叠区域的内存时可以保证copy的正确,而memcopy就不行了,但memcopy比memmove的速度要快一些,如:char s[] = "1234567890";char* p1 = s;char* p2 = s+2;memcpy(p2, p1, 5)与memmove(p2, p1, 5)的结果就可能是不同的,memmove()可以将p1的头5个字符"12345"正确拷贝至p2,而memcpy()的结果就不一定正确了.和memcpy相比,src和des有重叠的情况下,memmove可以保证数据的完整性.memmove保证的原因很简单,就是针对重叠的情况做特殊处理,因此速度会比memcpy慢一些具体的算法并不难想,画个图,分两种情况 1. src的尾部和des的头部重合 从src尾部开始,以地址 -- 的方式copy到des2. src的头部和des的尾部重合 从src头部开始,以地址 ++ 的方式copy到des
【memcpy和memmove的区别】
推荐阅读
- 许愿精灵 安娜苏的SecretWish香水,蓝色的和粉色的有什么区别?
- 动车和普通火车哪一个快
- 农商银行电话是955多少
- pdf打印和word打印的区别
- 小米机顶盒4c和4se的区别
- 创可贴会和伤口处的血肉粘在一起吗?
- 万和热水器使用方法
- 巴氏奶和纯牛奶营养一样吗?
- ISSR和EST-SSR标记在检测中国、日本和肯尼亚茶树品种遗传多样性上的比较分析
- 小绣球花的种植方法和注意事项