memmove与memcpy区别
来源:互联网 发布:魔方数据恢复怎么用 编辑:程序博客网 时间:2024/04/30 01:19
memmove与memcpy区别
memmove考虑内存区域重叠的情况而memcpy不考虑
memmove的其他实现
memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。
但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。
memmove的处理措施:
(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝
(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝
算法:
1,如果source>=dest||source+n<=dest【无重叠】,从头到尾复制
2,否则,从尾到头复制。
void * memmove(void *d,void *s,size_t n)
{
char*dest=(char*)d;
const char* source=(const char*)s;
void *ret=d;
if(source>dest||source+n<dest)
while(n--)
*dest++=*source++;
else if(source<dest)
{
dest+=n-1;
source+=n-1;
while(n--)
*dest--=*source--;
}
return ret;
}
memcpy
代码:
void * memmove(void *d,void *s,size_t n)
{
char*dest=(char*)d;
const char* source=(const char*)s;
void *ret=d;
while(n--)
*dest++=*source++;
return ret;
}
strcpy实现
不考虑重叠
char *strcpy(char* dest,const char *src)
{
char *tmp=dest;
while((*tmp++=*src++)!='\0')
;
*tmp='\0';//自己认为应该加上
return dest;
}
- memcpy与memmove区别
- memcpy 与 memmove 区别
- memcpy与memmove区别?
- memmove与memcpy区别
- memmove与memcpy区别
- memcpy与memmove区别
- memmove与memcpy区别
- memcpy与memmove的区别
- memmove与memcpy的区别
- memcpy与memmove 的区别
- memcpy与memmove的区别
- memcpy与memmove的区别
- memcpy和memmove的区别与实现
- memcpy与memmove的区别--标记
- memcpy和memmove的区别与实现
- memcpy和memmove的区别与实现
- memcpy与memmove函数的区别
- memcpy和memmove的区别与联系
- 反思:别被敏捷忽悠
- 简述UML之交互图
- SQL附加数据库时错误9003:LSN无效的处理方法
- wikioi 3299 有序数组合并求第K大问题
- Android学习–Android app 语言切换功能
- memmove与memcpy区别
- 清理过期token使Openstack提速
- 函数指针的数组
- 加强服务器IIS安全性能设置图文教程
- ThinkPHP应用分组部署与访问
- birt报表输出pdf的问题
- Best Time to Buy and Sell Stock II
- 黑马程序员--IO(4)(转换流)
- 小浩蠕虫(xiaohao.exe)的分析和解决方法