memmove与memcopy的区别
来源:互联网 发布:打谱软件哪个好索呢 编辑:程序博客网 时间:2024/04/30 08:17
前者更安全,多余重叠的区域的处理安全,而后者对于重叠区域的处理并不保证安全,
例如:、
char s[] = "abcdefghigk";
char* p1 = s;
char* p2 = s+3;
memcpy(p2, p1, 6)与memmove(p2, p1, 6)的结果就可能是不同的,memmove()可以将p1的头5个字符"12345"正确拷贝至p2,而memcpy()的结果就不一定正确了,因为p2的数据被覆盖了,导致src里面的数据丢失,但是memmove进行了保存,处理没有错误,从而可见,memcpy是memmove的子集,但是memcpy更快一些
memmove的实现
void *mymemmove(void *dest, const void *src, size_t n){ char temp[n]; int i; char *d = dest; const char *s = src; for (i = 0; i < n; i++) temp[i] = s[i]; for (i = 0; i < n; i++) d[i] = temp[i]; return dest;}memcpy的实现
void *mymemcpy(void *dest, const void *src, size_t n){ char *d = dest; const char *s = src; int *di; const int *si; int r = n % 4; while (r--) *d++ = *s++; di = (int *)d; si = (const int*)s; n /= 4; while (n--) *di++ = *si++; return dest;}
由此可见,memmove是一个字节一个字节的拷贝,而memcpy是4个字节四个字节的拷贝,所以快慢一目了然
对于库函数来说,由于没有办法知道传递给他的内存区域的情况,所以应该使用memmove()函数。通过这个函数,可以保证不会出现任何内存块重叠问题。而对于应用程序来说,因为代码“知道”两个内存块不会重叠,所以可以安全地使用memcpy()函数。
0 0
- memcopy与memmove的区别
- memmove与memcopy的区别
- memcopy与memmove的区别
- memcopy 和 memmove 的实现与区别
- memcopy和memmove的区别
- memcopy和memmove的区别
- memcopy和memmove 区别
- MemCopy与MemMove
- memmove,memcopy区别和实现
- memmove,memcopy区别和实现
- memmove,memcopy区别和实现
- memcopy和memmove的区别(笔试,面试)
- memcopy和memmove的区别(笔试,面试)
- memcopy和memmove的区别(笔试,面试)
- memcopy和memmove的区别(笔试,面试)
- memcopy和memmove的区别(笔试,面试)
- memcopy和memmove的区别(笔试,面试)
- memcopy memmove strcpy的基本知识
- VC++进行窗口枚举
- 删除某个文件(或者文件夹)的时候,提示,"操作无法完成,因为文件已在XX中打开,请关闭该文件并重试"
- 816x部分编码参数分析
- because it is missing required fields:
- <转>基于Spark Mllib,SparkSQL的电影推荐系统
- memmove与memcopy的区别
- java读取图片处理实现缩放裁剪,用于个人信息中上传图片自定义头像大小
- sql语句修改字段长度
- 理解机器学习中的方差
- int *ptr=(int *)(&a+1)
- ZCMU—1781
- selenium之元素定位
- SVG 与 HTML5 的 canvas 优缺点
- 读取数据库中数据,在页面上直接显示图片(点击该图片变大)